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.