Isso é importante principalmente quando usado com índices compostos:
CREATE INDEX ix_index ON mytable (col1, col2 DESC);
pode ser usado para:
SELECT *
FROM mytable
ORDER BY
col1, col2 DESC
ou:
SELECT *
FROM mytable
ORDER BY
col1 DESC, col2
, mas não para:
SELECT *
FROM mytable
ORDER BY
col1, col2
Um índice em uma única coluna pode ser usado com eficiência na classificação dos dois modos.
Veja o artigo no meu blog para obter detalhes:
Atualizar:
De fato, isso pode importar mesmo para um índice de coluna única, embora não seja tão óbvio.
Imagine um índice em uma coluna de uma tabela em cluster:
CREATE TABLE mytable (
pk INT NOT NULL PRIMARY KEY,
col1 INT NOT NULL
)
CREATE INDEX ix_mytable_col1 ON mytable (col1)
O índice on col1
mantém os valores ordenados col1
junto com as referências às linhas.
Como a tabela está agrupada, as referências às linhas são, na verdade, os valores de pk
. Eles também são ordenados dentro de cada valor de col1
.
Isso significa que as folhas do índice são realmente ordenadas (col1, pk)
e esta consulta:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk
não precisa de classificação.
Se criarmos o índice da seguinte maneira:
CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)
, os valores de col1
serão classificados em ordem decrescente, mas os valores pk
em cada valor de col1
serão classificados em ordem crescente.
Isso significa que a seguinte consulta:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk DESC
pode ser servido por, ix_mytable_col1_desc
mas não por ix_mytable_col1
.
Em outras palavras, as colunas que constituem um CLUSTERED INDEX
em qualquer tabela são sempre as colunas finais de qualquer outro índice nessa tabela.