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

Recursos ocultos no Oracle


"As varreduras de tabela completa nem sempre são ruins. Os índices nem sempre são bons."

Um método de acesso baseado em índice é menos eficiente na leitura de linhas do que uma varredura completa quando você o mede em termos de linhas acessadas por unidade de trabalho (normalmente por leitura lógica). No entanto, muitas ferramentas interpretarão uma varredura de tabela completa como um sinal de ineficiência.

Veja um exemplo em que você está lendo algumas centenas de faturas de uma tabela de faturas e procurando um método de pagamento em uma pequena tabela de pesquisa. Usar um índice para sondar a tabela de pesquisa para cada fatura provavelmente significa três ou quatro IO's lógicos por fatura. No entanto, uma varredura completa da tabela de pesquisa em preparação para uma junção de hash dos dados da fatura provavelmente exigiria apenas algumas leituras lógicas, e a própria junção de hash ficaria completa na memória quase sem custo algum.

No entanto, muitas ferramentas olhariam para isso e veriam "varredura de tabela completa" e diriam para você tentar usar um índice. Se você fizer isso, você pode ter apenas desafinado seu código.

Aliás, a dependência excessiva de índices, como no exemplo acima, faz com que a "Taxa de acertos do cache de buffer" aumente. É por isso que o BCHR é principalmente um absurdo como um preditor da eficiência do sistema.