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

MySQL:Por que o 5º ID na cláusula IN altera drasticamente o plano de consulta?


Como você mostrou, o MySQL tem dois planos de consulta alternativos para consultas com ORDER BY ... LIMIT n :
  1. Leia todas as linhas qualificadas, classifique-as e escolha n linhas superiores.
  2. Leia as linhas em ordem ordenada e pare quando n linhas qualificadas foram encontradas.

Para decidir qual é a melhor opção, o otimizador precisa estimar o efeito de filtragem de sua condição WHERE. Isso não é direto, especialmente para colunas que não são indexadas ou para colunas em que os valores são correlacionados. No seu caso, provavelmente é necessário ler muito mais da tabela em ordem de classificação para encontrar as primeiras 25 linhas de qualificação do que o otimizador esperava.

Houve várias melhorias na forma como as consultas LIMIT são tratadas, tanto nas versões posteriores da 5.6 (você está executando uma versão pré-GA!) quanto nas versões mais recentes (5.7, 8.0). Sugiro que você tente atualizar para uma versão posterior e veja se isso ainda é um problema.

Em geral, se você deseja entender as decisões do planejador de consultas, deve examinar o rastreamento do otimizador para a consulta.