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

Por que o MySQL não usa um índice para uma comparação maior que?


Você provavelmente seria melhor deixar o MySql decidir sobre o plano de consulta. Há uma boa chance de que fazer uma varredura de índice seja menos eficiente do que uma varredura completa de tabela.

Existem duas estruturas de dados no disco para esta tabela
  1. A própria tabela; e
  2. O índice B-Tree da chave primária.

Quando você executa uma consulta, o otimizador tem duas opções sobre como acessar os dados:

SELECT * FROM userapplication WHERE application_id > 1025;

Usando o índice
  1. Verifique o índice B-Tree para encontrar o endereço de todas as linhas em que application_id > 1025
  2. Leia as páginas apropriadas da tabela para obter os dados dessas linhas.

Não usar o Índice

Digitalize a tabela inteira e escolha os registros apropriados.

Escolhendo a melhor estratégia

O trabalho do otimizador de consultas é escolher a estratégia mais eficiente para obter os dados desejados. Se houver muitas linhas com um application_id > 1025 então, na verdade, pode ser menos eficiente usar o índice. Por exemplo, se 90% dos registros tiverem um application_id > 1025 então o otimizador de consulta teria que varrer cerca de 90% dos nós folha do índice b-tree e então ler pelo menos 90% da tabela também para obter os dados reais; isso envolveria a leitura de mais dados do disco do que apenas varrer a tabela.