diogoico 0 Denunciar post Postado Abril 11, 2008 Olá, Eu estou fazendo um sistema e em uma das tabelas tem mais ou menos 5 milhoes de registros o que deixa query do tipo Ordenar ou Selecionar alguns registros bem lento, mais ou menos 10 segundos pra fazer a operação mas em query de tipo buscar somente um registor ele é bem rapido... Tem alguma forma de deixar o sql mais rapido em relação a isso? essa é a query que eu uso: $busca = $DB->Execute("SELECT SQL_CACHE nome,telefone FROM `$tabela_nomes` ORDER BY nome ASC LIMIT $inicio, $fim"); eu estava pensando em usar cache mas acho que tb não ia adiantar muita coisa... Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Abril 11, 2008 talvez seja util separar as tabelas. por exemplo cadastros_ac cadastros_df cadastros_gi ... a logica seria cadastros_ac "A-C" seriam gravados todos os nomes que iniciam por A, B ou C fiz isso num banco de dados volumoso. o problema de lentidao comecou como o seu caso. quando chegou no 4.600.000 comecou a ficar lento entao dividi as tabelas. Hoje os dados chegam a 17 milhoes mas nao recomendo fazer esse tipo de tecnica com versoes inferiores ao 5 porque tera que utilizar procedures para otimizar outros tipos de operacoes, indexacoes etc.. Compartilhar este post Link para o post Compartilhar em outros sites
diogoico 0 Denunciar post Postado Abril 11, 2008 Hunn... mas acho que isso não vai funcionar pra mim pois algumas querys usam outros informações alem do nome por exemplo procurar nomes com profissão engenheiro ai daria no mesmo porque ia ter que olhar em todas as tabelas de nomes... Sera que tem algum outro banco de dados que consegue aguentar isso? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Abril 12, 2008 o desempenho depende da estrutura montada. por exemplo, para informacoes como profissiao, escolaridade, especializacoes e outros você poderia ter criado em outras tabelas. posso garantir que o MySQL aguenta o tranco. Você deve estar atento também quatno a capacidade do servidor. Processador, memória, armazenamento em disco.. em média, 20 milhoes de dados ainda é pouco. tenho outras aplicações pequenas com 300 ~ 500 milhoes. Para esses casos tive que dividir não somente as tabelas mas também os bancos de dados. Detalhe.. usando Oracle 9i. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Abril 12, 2008 essa lerdeza eh seu my.ini/my.cnf mal configurado , hardware obsoleto e possivelmente falta de indices Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Abril 12, 2008 Concordo com o que disse o amigo "giesta" e acrescento que, não somente hardware obsoleto...o seu hardware está mal dimensionado, talvez, você tenha uma memória cache de 200kb e queira colocar um conjunto de resultados retornados por uma consulta de 1MB...é como querer colocar toda a torcida do Flamengo dentro do estádio do Guarani, em Campinas. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Reveja seus conceitos, pois, como muita gente pensa, o MySQL não é apenas uma caixa mágia para se cadastrar e recuperar dados, existe otimização, configurações e muitos outros quisitos a serem analisados para otimizar consultar... não adianta martelar, tem que estudar!! Forte abraço meu camarada!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites