Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

DOs e DONTs para índices


De um modo geral:

1. Não adicione um índice a menos que você realmente precise dele.


Cada índice torna as gravações mais lentas...

2. Um índice será usado nas cláusulas where:

-- index on foo (bar)
select bar from foo where bar = :bar;

Da mesma forma, será usado em referências de chave estrangeira (em ambas as tabelas).
-- index on foo (bar) if baz (bar) is frequently updated/deleted.
create table foo (bar references baz (bar)); 

3. Um índice será usado para classificação, especialmente quando vinculado a um limite:

-- index on foo (bar)
select bar from foo order by bar limit 10;

4. Índices de várias colunas são ocasionalmente úteis quando 2. e 3. se aplicam.


Nesse caso, coloque as condições where primeiro e a chave de classificação por último:
-- index on foo (baz, bar)
select bar from foo where baz between :baz1 and :baz2 group by bar;

5. Mantenha as estatísticas da sua tabela atualizadas.


Se as estatísticas da tabela forem ruins, há poucas chances de que o otimizador use seus índices. Aspire/analise manualmente seu banco de dados, se necessário.

6. O uso do índice depende da repartição da sua tabela.


Após um determinado limite de linhas recuperadas, será mais rápido fazer uma verificação completa da tabela. Se o seu índice estiver em um campo booleano que divide mais ou menos sua tabela em dois, ele nunca será usado.

Da mesma forma, se seus dados forem armazenados de forma que a varredura de índice provavelmente acabe acessando aleatoriamente quase todas as páginas de disco aplicáveis ​​a essa tabela, o planejador preferirá uma varredura de tabela completa.

7. Considere índices parciais/de expressão quando disponíveis.


Se você tiver um campo que tenha o mesmo valor, exceto 10% de suas linhas, considere um índice parcial nele (ou seja, onde não esse valor). Isso resulta em um índice muito menor sem prejudicar sua real utilidade.

Se você estiver constantemente consultando uma expressão aplicada à sua coluna e sua plataforma oferecer índices de expressão, considere adicionar um índice nela. Quando usada, a expressão não será avaliada para cada linha.