Respondendo suas perguntas:
-
Épossible_keys
os índices que o MySQL pode querer usar e askeys
são os índices que o MySQL realmente usa? Sim isto está correcto.
-
Por que o índice éindex_status_mit_spam
não usado? Na consulta, as colunas têm a mesma ordem que no índice. SQL usa estatísticas nos índices da tabela para determinar qual índice usar. A ordem dos campos na instrução select NÃO tem efeito em qual índice usar. As estatísticas sobre índices incluem informações como exclusividade do índice e outras coisas. Índices mais exclusivos provavelmente serão usados. Leia mais sobre isso aqui:http ://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html ou aqui:http://dev.mysql .com/doc/refman/5.0/en//myisam-index-statistics.html . Esses fatores determinam como o MySQL seleciona um índice usar. Ele usará apenas UM índice .
-
Por que o índice éindex_datum
não usado para oORDER BY
? O MySQL usará apenas um índice e não dois durante uma consulta, pois usar um segundo índice diminuirá ainda mais a velocidade da consulta. Ler um índice NÃO é ler a tabela. Isso está relacionado à eficiência operacional da consulta. Aqui estão as respostas que podem explicar alguns conceitos:https://dba.stackexchange.com/questions/18528/performance-difference-between-clustered-and-non-clustered-index/18531#18531 Ou Adicionar cláusula de limite à consulta do MySQL diminui drasticamente Ou índices MySQL e quando agrupar eles . Essas respostas têm muitos detalhes que ajudarão você a entender a indexação do MySQL.
-
Como posso otimizar meus índices de tabela ou a consulta? (A consulta acima precisa de até 3 segundos com cerca de um milhão de entradas na tabela). Bem, há um filesort aqui que provavelmente está deixando você mais lento. Pode ser que a tabela tenha muitos índices e o MySQL esteja selecionando o errado.
Você precisa entender que os índices aceleram as leituras e diminuem a velocidade das gravações nas tabelas. Portanto, apenas adicionar índices nem sempre é uma boa ideia. As respostas e dicas acima devem ajudá-lo a obter uma compreensão sólida.