Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como você interpreta o plano de explicação de uma consulta?


Estremeço sempre que vejo comentários de que as varreduras de tabela completas são ruins e o acesso ao índice é bom. Full table scans, index range scans, full index scans rápidos, aninhados loops, merge join, hash joins etc. para chegar a qualquer conclusão significativa.

Uma varredura completa é simplesmente a maneira mais eficiente de ler uma grande proporção dos blocos de um segmento de dados (uma tabela ou uma (sub)partição de tabela) e, embora muitas vezes possa indicar um problema de desempenho, isso ocorre apenas no contexto se é um mecanismo eficiente para atingir os objetivos da consulta. Falando como um cara de data warehouse e BI, meu sinalizador de aviso número um para desempenho é um método de acesso baseado em índice e um loop aninhado.

Portanto, para o mecanismo de como ler um plano de explicação, a documentação do Oracle é um bom guia:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

Leia também o Guia de Ajuste de Desempenho.

Também tenha um google para "feedback de cardinalidade", uma técnica na qual um plano de explicação pode ser usado para comparar as estimativas de cardinalidade em vários estágios de uma consulta com as cardinalidades reais experimentadas durante a execução. Wolfgang Breitling é o autor do método, acredito.

Então, resumindo:entenda os mecanismos de acesso. Entenda o banco de dados. Entenda a intenção da consulta. Evite regras de ouro.