Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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.
Estou rodando diretamente no banco mesmo.
quando faço outras queries estao rapidas.
depois de cada subquery acrescenta limit 0,1
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_1FOREIGN KEY (coluna) REFERENCEStabela(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