Digamos que temos várias colunas na tabela mysql.
Latitude longitude
Digamos que façamos um Ãndice (latitude e longitude)
Bem, o Ãndice classificará primeiro por Latitude e SE a Latitude for a mesma, ele classificará por Longitude.
Algo suspeito deve aparecer. A latitude raramente, ou nunca, é exatamente a mesma.
Digamos que queremos encontrar todos os pontos cujo Lat,Long está "em uma caixa" Como na Terra esses Ãndices podem ser úteis.
Observação: estou tentando entender como funciona a indexação. Não estou tentando dizer esnobemente que o Ãndice composto é estúpido. Não precisa ser uma resposta completa. Qualquer apontamento é bom.
Mais importante, suspeito que uma consulta usará apenas 1 Ãndice e a única maneira de uma consulta usar o Ãndice multilpe é criar um Ãndice composto.
Os Ãndices são, na maioria dos casos, uma estrutura B-Tree (ou algum tipo de). Existem DBMS que suportam diferentes tipos de indexação.
Como você está falando sobre longitude/latitude, o PostgreSQL com seus Ãndices GIST vem à mente. O Oracle possui Ãndices Bitmap além dos Ãndices B-Tree. Tenho certeza de que o SQL Server e o DB2 também têm alguns tipos de Ãndice especiais. E há Ãndices de texto completo que tornam a pesquisa de texto muito eficiente.
Um Ãndice B-Tree é muito eficiente para encontrar um valor especÃfico - pense em um Ãndice de chave primária em que todos os valores são diferentes. Se o Ãndice contiver apenas a(s) coluna(s) PK (ou seja, não é um Ãndice clusterizado), normalmente procurar uma linha por um valor PK especÃfico não leva mais do que (aproximadamente) 3-4 operações IO (pelo menos com Oracle). 2-3 para encontrar o bloco de Ãndice e um adicional para ler toda a linha. Isso fica mais eficiente se o Ãndice contiver colunas adicionais para que a pesquisa da linha real da tabela não seja necessária. O termo para isso é "Ãndice de cobertura" ou "recuperação somente de Ãndice".
Agora, para fazer "pesquisas de intervalo" (por exemplo
where foo > 42
), um Ãndice é muito útil, assim como na maioria dos DBMS, o Ãndice também pode ser verificado de acordo com um predicado. Normalmente (novamente, isso depende muito do DBMS), isso é um pouco menos eficiente do que uma pesquisa direta (novamente, isso também depende da capacidade de fazer uma "recuperação somente de Ãndice").Não conheço nenhum BMS que não possa usar mais de um Ãndice em uma consulta. Pense em uma junção em uma coluna PK e FK - dependendo da distribuição de dados, o DBMS pode usar o Ãndice para localizar as linhas pai (pesquisa PK) e as linhas filhas (pesquisa FK).
Mas nem todo SGBD pode usar mais de um Ãndice para a mesma tabela em uma única consulta.
Afinal, se um Ãndice está sendo usado ou não, depende de muitas coisas.
Posso altamente recomendar http://use-the-index-luke.com/ que é uma introdução muito boa sobre indexação em todos os principais DBMS.
Informações especÃficas do DBMS:
Oracle: http://docs.oracle.com/cd/E11882_01/server.112/e25789/indexiot.htm
PostgreSQL: http://www.postgresql.org/docs/current/static/indexes.html
Os valores não precisam ser exatos para usar um Ãndice. Em seu exemplo particular, uma varredura de intervalo limitará a quantidade de dados examinados. Um Ãndice em ambos os limites permite que os dados sejam limitados em ambos os eixos.
Uma varredura de alcance opera conceitualmente semelhante a como você olharia para um mapa. Se você quiser encontrar o Monumento de Washington na Latitude: 38,889449 Longitude: -77,035232, você pode começar sua pesquisa concentrando-se em 30 a 40 Latitude e -70 a -80 Longitude. Se você apenas olhasse para o Latitude, teria muito mais mapas para ver do que quando olhasse para ambos.
Aqui está uma demonstração no Oracle.