Deparei com um material bem interessante que traz algumas “premissas” para a criação de indices.
Segue a lista de sugestões:
Crie Indices quando:
Uma coluna contiver uma grande faixa de valroes |
Uma coluna contiver muitos valores nulos |
Quando uma ou mais colunas forem usadas frequentemente em clausulas WHERE ou em JOINS |
Se a tabela for muito grande e as consultas realizadas recuperarem menos de 5% dos registros. |
NÃO Crie Indices quando:
As colunas não são usadas frequentemente como condição nas consultas |
A tabela for pequena ou se os resultados das consultas forem maiores que 5-10% dos registros. |
A tabela for atualizada com frequencia |
As colunas fizerem parte de uma expressão* |
* Nesse item entende-se por expressão algo na clausula where tipo:
SELECT TABLE_NAME FROM ALL_TABLES WHERE TABLE_NAME||OWNER = 'DUALSYS'
Observe que na clausula de comparação as colunas TABLE_NAME e OWNER fazem uma expressão de comparação e por consequencia um índice não ajudaria em nada.
Outras coisas importantes de lembrar:
- ÍNDICES NÃO SÃO ALTERÁVEIS! (Para vc alterar um índice vc deve removê-lo e recriá-lo. )
- ÍNDICES ONERAM A PERFORMANCE DE INSERT / UPDATE ( Não dá pra fazer milagres, se sua tabela tiver muitos índices as performances de alterações podem ser comprometidas )