KUROL3 3 Denunciar post Postado Junho 21, 2011 Olá apos uma migração feita pela locaweb simplesmente o meu select ficou extremamente lento.. segue sql SELECT count(*) FROM ocorrencias O INNER JOIN ocorrencias_tipo OT ON (OT.id = O.id_tipo) INNER JOIN departamentos DP ON DP.id = '7' AND DP.id = IF ((SELECT count(*) FROM ocorrencias_releases ORE WHERE ORE.id_ocorrencia = O.id) = 0, O.id_departamento, (SELECT OCR3.id_departamento FROM ocorrencias_releases OCR3 WHERE OCR3.id_ocorrencia = O.id ORDER BY OCR3.id DESC LIMIT 1)) WHERE AND O.id_usuario_fechou = 0 aqui o resultado do explain id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY DP const PRIMARY PRIMARY 4 const 1 Using index 1 PRIMARY O ref id_usuario_fechou,id_tipo id_usuario_fechou 4 const 1998 Using where 1 PRIMARY OT eq_ref PRIMARY PRIMARY 4 imobiliariapir.O.id_tipo 1 Using index 1 PRIMARY C eq_ref PRIMARY PRIMARY 4 imobiliariapir.O.id_cliente 1 Using index 3 DEPENDENT SUBQUERY OCR3 index id_ocorrencia,id_oco_dep PRIMARY 4 NULL 1 Using where 2 DEPENDENT SUBQUERY a tabela ocorrencias tem 30142 registros a tabela ocorrencias_releases tem 166256 registros se alguem puder ajudar o pq esta tão lento agradeço obrigado marco Compartilhar este post Link para o post Compartilhar em outros sites
FernandoPhP 9 Denunciar post Postado Junho 21, 2011 Tenta limitar todas as subquerys para quando o banco encontrar um resultado possível ele pare de procurar. Verifica se tem as colunas das tabelas envolvidas estão referenciadas como chave-estrangeira Ex: ADD CONSTRAINT `tabela_ibfk_1` FOREIGN KEY (`coluna`) REFERENCES `tabela` (`coluna`) Verifique também se as tabelas estão como ENGINE=InnoDB, porque para o relacionamento funcionar as tabelas tenque estar com essa ENGINE Abraço Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Junho 21, 2011 Alterei a engine para InnoDB realmente os números mudaram, porem esta demorando muito.... o que você quis dizer com "Tenta limitar todas as subquerys para quando o banco encontrar um resultado possível ele pare de procurar." tem algum exemplo abraços marco id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY DP const PRIMARY PRIMARY 4 const 1 Using index 1 PRIMARY OT index PRIMARY id_departamento 4 NULL 180 Using index 1 PRIMARY O ref id_usuario_fechou,id_tipo id_usuario_fechou 8 const,imobiliariapir.OT.id 12 Using where 3 DEPENDENT SUBQUERY OCR3 index id_ocorrencia,id_oco_dep PRIMARY 4 NULL 1 Using where 2 DEPENDENT SUBQUERY ORE ref id_ocorrencia,id_oco_dep id_ocorrencia 4 imobiliariapir.O.id 2 Using index Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Junho 21, 2011 Quando roda diretemente no Banco é rápida ? Ocorre o mesmo (lentidão LocalWeb) para outras queries ? Se for isto o problema pode ser de conexão. Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Junho 21, 2011 Estou rodando diretamente no banco mesmo. quando faço outras queries estao rapidas. Compartilhar este post Link para o post Compartilhar em outros sites
FernandoPhP 9 Denunciar post Postado Junho 21, 2011 depois de cada subquery acrescenta limit 0,1 Compartilhar este post Link para o post Compartilhar em outros sites