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

O MySQL para de usar o índice quando restrições adicionais são adicionadas


Isso é um pouco difícil de explicar.

A consulta que usa o índice está usando porque o índice é um índice de "cobertura". Ou seja, todas as colunas do índice estão na consulta. A única parte do índice realmente sendo usada de forma eficaz é a condição em latitude .

Normalmente, um índice de cobertura teria somente as colunas mencionadas na consulta. No entanto, a chave primária é usada para fazer referência aos registros, então suponho que users.Id é a chave primária na mesa. E o índice está sendo verificado quanto a valores válidos de latitude .

A consulta que não está usando o índice não o está usando por dois motivos. Primeiro, as condições nas colunas são desigualdades. Uma busca de índice só pode usar condições de igualdade e uma desigualdade. Isso significa que o índice só pode ser usado para latitude em seu método mais eficaz. Em segundo lugar, as colunas adicionais na consulta exigem que você acesse a página de dados de qualquer maneira.

Em outras palavras, o otimizador está, na verdade, dizendo:"Por que se preocupar em ir ao índice para varrer o índice e depois varrer as páginas de dados? Em vez disso, posso apenas varrer as páginas de dados e obter tudo de uma vez."

Sua próxima pergunta é, sem dúvida:"Mas como faço para tornar minha consulta mais rápida?" Minha sugestão seria investigar índices espaciais .