Entender o plano de execução de uma consulta
-
22-07-2019 - |
Pergunta
Eu tenho esse SQL:
SELECT
*
FROM
Requisicao r
join convenio c on c.idconvenio = r.idconvenio
join empresa e on e.idempresa = c.idempresa
Quando eu executá-lo eu recebo este plano de execução:
PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318))
O que significa que o índice do Convenio não foi utilizado (cada mesa tem seus índices)
Eu gostaria de entender um pouco melhor para que eu possa melhorar alguns problemas de desempenho que estou tendo com este sistema.
Graças.
Solução
O que parece errado para você? Porque você não tem quaisquer condições (cláusula WHERE) servidor irá ler uma tabela, naturalmente, ou seja, desde a primeira linha para o último. Tendo em seletividade do índice consideração servido decidiu que seria melhor para ler c e para juntar-se registros de e e r.
Outras dicas
Eu concordo com Andrei. Se convenio.idconvenio tem baixa seletividade, o plano é bom.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow