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 .