Will SQL Server usar um índice composto, quando apenas uma única coluna é na cláusula WHERE?

StackOverflow https://stackoverflow.com/questions/2228192

Pergunta

Say Eu tenho uma tabela:

CREATE TABLE Users (
    Id INT IDENTITY (1, 1),
    FirstName VARCHAR(40),
    LastName VARCHAR(40)
)

As consultas são geralmente em FirstName ou LastName , mas também em FirstName e LastName .

Se eu criar um índice não agrupado em FirstName e outro no LastName , em seguida, minhas duas primeiras consultas são atendidas. Aparentemente, o SQL Server irá utilizar intersecção para a outra consulta.

Como alternativa, se eu tiver indexees em (nome) e em (Sobrenome, Nome), pode / não SQL Server usar o segundo índice para consultas em apenas LastName , bem como consultas em ambos?

O SQL Server partes do índice composto loja da esquerda para a direita ou da direita da esquerda para a? Em outras palavras: ele vai construir a chave como LastNameFirstName ou NomeApelido? Ou é livre para escolher um arbitrariamente?

Foi útil?

Solução

pode / não SQL Server usar o índice (Sobrenome, Nome) para consultas sobre apenas sobrenome, bem como consultas em ambos?

Sim, o banco de dados irá usar o índice (Sobrenome, Nome) para consultas sobre LastName. Será não utilizar este índice para consultas apenas em FirstName embora.

Será que armazenar peças de índice composto da esquerda para a direita ou da direita para a esquerda?

O armazenamento é em um B-Tree . Se você pensar nisso como sendo armazenados da direita para a esquerda ou da esquerda para a direita é apenas uma ajuda de visualização útil, e não relacionadas com o armazenamento de dados real.

Outras dicas

Sim, se você consulta on LastName sozinho ele deve usar o índice (Sobrenome, Nome). Por isso, seria usado tanto ao consultar por LastName sozinho, ou LastName e FirstName juntos.

orientação geral é o de assegurar a coluna com a maior selectividade aparece pela primeira vez no índice composto como este fornece o máximo benefício / estreita-se para baixo o conjunto de resultados mais cedo antes que se segue, colunas menos selectivos.

Dependendo da consulta real que você está enviando, um índice composto por duas colunas pode ser usado mesmo se você procurar a 2ª única coluna. No entanto, você não vai obter uma busca de índice, mas muito provavelmente uma varredura de índice. Se esta é "suficientemente bom" para você, depende do seu ambiente específico. A indexação é mais uma arte do que uma ciência e uma série de diferentes fatores influenciam a sua decisão sobre como indexar uma tabela. É sempre um trade-off como tendo muitos índices sobre uma mesa é tão ruim quanto ter muito poucos. Certifique-se de que suas consultas mais cruciais são bem coberto e, em seguida, decidir caso a caso se qualquer índice adicional vale o seu custo.

Além disso, uma vez que ainda não foi mencionado e desde que você esteja, pelo menos no SQL Server 2005: Deixe-me jogar na cláusula de índices não clusterizados INCLUEM. É um esquecido, mas disso realmente útil para qualquer estratégia de indexação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top