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

Como escolher e otimizar índices oracle?


A documentação do Oracle tem um excelente conjunto de considerações para opções de indexação:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

Atualização para 19c:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBFC2B7A1D

Citando:

  • Considere as chaves de indexação que são usadas com frequência nas cláusulas WHERE.

  • Considere as chaves de indexação que são usadas com frequência para unir tabelas em instruções SQL. Para obter mais informações sobre como otimizar junções, consulte a seção "Usando clusters de hash para desempenho".

  • Escolha chaves de índice que tenham alta seletividade. A seletividade de um índice é a porcentagem de linhas em uma tabela com o mesmo valor para a chave indexada. A seletividade de um índice é ótima se poucas linhas tiverem o mesmo valor. Observação:o Oracle cria índices automaticamente, ou usa índices existentes, nas chaves e expressões de chaves exclusivas e primárias que você define com restrições de integridade. menos frequentemente do que outros valores.

  • Não use índices de árvore B padrão em chaves ou expressões com poucos valores distintos. Essas chaves ou expressões geralmente têm pouca seletividade e, portanto, não otimizam o desempenho, a menos que os valores de chave selecionados com frequência apareçam com menos frequência do que os outros valores de chave. Você pode usar índices de bitmap efetivamente nesses casos, a menos que o índice seja modificado com frequência, como em um aplicativo OLTP de alta simultaneidade.

  • Não indexe colunas que são modificadas com frequência. As instruções UPDATE que modificam colunas indexadas e as instruções INSERT e DELETE que modificam tabelas indexadas demoram mais do que se não houvesse índice. Essas instruções SQL devem modificar dados em índices, bem como dados em tabelas. Eles também geram desfazer e refazer adicionais.

  • Não indexe chaves que aparecem apenas em cláusulas WHERE com funções ou operadores. Uma cláusula WHERE que usa uma função diferente de MIN ou MAX ou um operador com uma chave indexada não disponibiliza o caminho de acesso que usa o índice, exceto com índices baseados em função.

  • Considere indexar chaves estrangeiras de restrições de integridade referencial nos casos em que um grande número de instruções INSERT, UPDATE e DELETE simultâneas acessam as tabelas pai e filho. Esse índice permite UPDATEs e DELETEs na tabela pai sem compartilhar o bloqueio da tabela filho.

  • Ao escolher indexar uma chave, considere se o ganho de desempenho para consultas vale a perda de desempenho para INSERTs, UPDATEs e DELETEs e o uso do espaço necessário para armazenar o índice. Você pode querer experimentar comparando os tempos de processamento das instruções SQL com e sem índices. Você pode medir o tempo de processamento com o recurso de rastreamento SQL.