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

Por que o mysql atingiu o índice quando a coluna quebra com a função de data


O relatório EXPLAIN é conhecido por ser difícil de interpretar. Eles sobrecarregaram muita informação em alguns campos. Você pode tentar

O type: index indica que está fazendo um index-scan , o que significa que está visitando todas as entradas no índice.

Isso visita o mesmo número de entradas que uma verificação de tabela, exceto que é em relação a um índice secundário em vez do índice clusterizado (primário).

Quando vemos type: index , EXPLAIN mostra possible_keys: NULL o que significa que não pode usar nenhum índice para pesquisar com eficiência. Mas também mostra key: add_time o que significa que o índice que está usando para a varredura de índice é add_time .

O index-scan é devido ao fato de que o MySQL não pode otimizar expressões ou chamadas de função por si só. Por exemplo, se você tentar pesquisar datas com um mês específico, poderá pesquisar month(add_time) = 4 mas isso não usaria o índice em add_time porque as datas com esse mês estão espalhadas pelo índice, nem todas agrupadas.

Você deve saber que date(add_time) deve poder ser pesquisado pelo índice, mas o MySQL não faz essa inferência. O MySQL apenas vê que você está usando uma função e nem tenta usar o índice.

É por isso que o MySQL 5.7 introduziu colunas geradas para nos permitir indexar uma expressão, e o MySQL 8.0 o tornou ainda melhor ao permitir um índice a ser definido para uma expressão sem exigir que definamos uma coluna gerada primeiro.