Posicionamento de coluna de alta cardinalidade em índices compostos com consultas de intervalo
Ao consultar uma tabela com um índice composto envolvendo uma condição de intervalo, o posicionamento de colunas dentro do índice podem impactar significativamente o desempenho.
Considere os arquivos da tabela com uma chave primária (did, nome do arquivo) e dois índices compostos: INDEX(filetime, ext) e INDEX(ext, tempo de arquivo). Ambos os índices contêm a coluna filetime, que tem cardinalidade maior que ext.
A consulta:
WHERE ext = '...' AND filetime BETWEEN ... AND ...
requer acesso a dados com base em ext e filetime. Surge a pergunta: qual índice é ideal para tal consulta?
Análise
Para determinar o índice ideal, podemos usar FORCE INDEX e examinar os planos de execução:
-- Force range on filetime first FORCE INDEX(fe) SELECT COUNT(*), AVG(fsize) FROM files WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetime = '2015-01-01' AND filetimeA saída mostra que INDEX(ext, filetime) (ef) tem uma contagem de linhas significativamente menor, indicando uma verificação mais eficiente.
Optimizer Trace
Para analisar melhor o comportamento do otimizador, podemos usar o otimizador trace:
SELECT explain_format = 'JSON'; SELECT COUNT(*), AVG(fsize) FROM files WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetimeO rastreamento revela que o otimizador escolhe INDEX(ext, filetime) porque pode usar ambas as colunas do índice para filtrar e buscar dados. Por outro lado, INDEX(filetime, ext) só pode usar a primeira coluna (filetime) para filtragem.
Conclusões
Com base na análise, as seguintes conclusões podem ser desenhado:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3