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

Existe um método ideal para ordenar um índice composto do MySQL?


Como regra geral, em um índice de várias colunas, você deseja que as colunas que tenham a maior cardinalidade, ou em outras palavras, o maior número de valores distintos, venham primeiro no índice.

Para ser mais preciso, você deseja primeiro a coluna com o menor número de correspondências possível com seus critérios de pesquisa, para que você possa restringir o conjunto de resultados o máximo possível, mas, em geral, é o mesmo que a cardinalidade mais alta.

Portanto, no seu exemplo, você desejará que a coluna que terá milhões de valores distintos esteja no índice antes daquela com apenas 6 valores distintos.

Supondo que você esteja selecionando apenas uma linha dos milhões de valores, isso permite que você elimine mais linhas mais rapidamente.

Ao considerar duas colunas de cardinalidade semelhante, coloque a menor primeiro (INTEGER colunas antes de VARCHAR colunas) porque o MySQL pode comparar e iterar sobre elas mais rapidamente.

Uma ressalva é que, se você estiver selecionando com intervalos (por exemplo, WHERE datecol > NOW() ), então você quer as colunas de intervalo mais à direita e suas colunas com uma única constante (por exemplo, WHERE id = 1 ) Para a esquerda. Isso ocorre porque seu índice só pode ser usado para pesquisar e ordenar até o ponto do primeiro valor do intervalo.