Jump to content


Photo

Alguma Sugestão Em Php Para Estouro De Memória


  • Faça o login para participar
10 replies to this topic

#1 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 24/07/2009, 15:45

pessoal,

estou efetuando uma busca em um BD MySQL e gostaria de saber se wexiste algum método em php que auxilie na busca, pois está buscando cerca de 200.000 resultados e está dando estouro de memória, alguma sugestão?

valeu!

#2 ThalesWeb

ThalesWeb

    Veterano

  • Usuários
  • 1435 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 24/07/2009, 16:18

Vc realmente precisa buscar os 200.000 registros? E realmente precisa buscar todos os campos que está buscando atualmente?
Explique melhor sua situação, com a tabela, query, etc para que possamos ajudar.
Thales Santos

#3 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 24/07/2009, 16:40

lá vai, na verade são 500.000 resultados e 3 campos apenas , id,nome,email.

lá vai a a query:

[codebox]
SELECT id_cliente, nome, email
FROM clientes_pf
ORDER BY rand( )LIMIT 500000
[/codebox]

preciso em uma tabela de 3.000.000 (três milhões de resultados ), buscar 500.000 randomicamente, pensei em usar limit mas limit n seria randomico e sim os 500.000 primeiros.

alguma sugestão?

#4 CMAC

CMAC

    Normal

  • Usuários
  • 93 posts
  • Sexo:Masculino

Posted 24/07/2009, 18:53

Greg,

ORDER BY RAND() tem um péssimo desempenho.

Veja aqui uma dica do Crab sobre isso.

#5 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 27/07/2009, 15:57

não entendi...



preciso buscar 500.000 resultados randomicamente e guardá-los em uma variável....


eu consegui utilizando for e limit, mas dessa forma não é randomico e sim os 500.000 primeiros.

Desesperadamente no aguardo.

Valeu!

#6 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 27/07/2009, 16:01

Não greg...
Se você colocar o LIMIT de 500.000, ele pega somente 500.000 dos 3 milhões, mas de forma randômica.
Funciona da maneira que está fazendo.

Fiz um teste com uma tabela que eu tenho, que tem alguns milhares de registros, e deu certo.
mas como disseram, o RAND() não é eficaz, por isso, aconselho dar uma lida mais atenciosa ao post do Crab.


Até mais ^_^

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#7 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 27/07/2009, 17:16

não compreendi o exemplo...

se puder esmiuçar por favor... :-(

Edição feita por: Greg, 27/07/2009, 17:56.


#8 Fábio Sciubba

Fábio Sciubba

    Turista

  • Usuários
  • 30 posts
  • Sexo:Não informado

Posted 27/07/2009, 18:01

Tentou setar o limite de memoria no php.ini ?? ou sou eu que n to entendo nada?

#9 Fábio Web Arts

Fábio Web Arts

    Web IN Arts

  • Usuários
  • 299 posts
  • Sexo:Masculino
  • Localidade:No Saco De Magé
  • Interesses:Tudo que for da área de Informática

Posted 27/07/2009, 21:04

oe coloca limit 500000 order by id asc ou desc

#10 Fabio_RJ

Fabio_RJ

    PHP Conspiracy

  • Usuários
  • 206 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro

Posted 27/07/2009, 23:20

os ids dos clientes sao sequenciais?
você poderia fazer uma função separada do mysql para gerar um array de valores aleatórios e depois buscar exclusivamente estes valores.

Estou pesquisando aqui e se encontrar algo de interessante, postarei aqui.

quanto a sugestão do amigo acima de limitar a memoria via php.ini, não faria sentido pois a ideia aqui é otimizar a query, limitar a memoria pelo php só iria travar o script em questao e nao iria trazer os resultados.
---
TeraDesign.com.br => [Hospedagem, Registro de Dominios, Desenvolvimento de websites e etc...]

#11 Greg

Greg

    Ativo

  • Usuários
  • 302 posts
  • Sexo:Não informado
  • Localidade:Florianópolis

Posted 28/07/2009, 10:25

é, são sequenciais, mas estão do tipo 521, 759 , 854 , 1026 , 10524... entendeu estão sequenciais, mas não seguem uma ordem cronológica... Sinceramente já não sei mais mesmo o que tentar...

no aguardo de alguma luz.

valeu!




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq