Tipos de consulta e índices

Quando você estiver considerando a criação de um índice em uma coluna, avalie como a coluna será usada em consultas. As tabelas seguintes descrevem os tipos de consulta para os quais índices são úteis.

ObservaçãoObservação

Os exemplos da tabela são baseados no banco de dados de exemplo AdventureWorks2008R2. Quando você executar os exemplos no SQL Server Management Studio, será possível exibir os índices selecionados pelo otimizador de consulta ao exibir o plano de execução atual. Para obter mais informações, consulte Como exibir um plano de execução real.

Consultar em qual predicado de coluna está uma destas opções

Descrição de consulta e exemplo

Índice a ser considerado

Correspondência exata a um valor específico

Pesquisa uma correspondência exata na qual a consulta usa a cláusula WHERE para especificar uma entrada de coluna com um valor específico. Por exemplo:

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID = 228; 

Índice não clusterizado ou clusterizado na coluna BusinessEntityID.

Correspondência exata a um valor em uma lista IN (x, y, z)

Pesquisa uma correspondência exata a um valor em uma lista especificada de valores. Por exemplo:

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID IN (288, 30, 15);

Índice não clusterizado ou clusterizado na coluna BusinessEntityID.

Intervalo de valores

Pesquisa um intervalo de valores no qual a consulta especifica qualquer entrada que tenha um valor entre dois valores. Por exemplo:

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID BETWEEN 1 and 5;

Ou

WHERE ProductModelID >= 1 AND ProductModelID <= 5

Índice clusterizado ou não clusterizado na coluna ProductModelID.

Junção entre tabelas

Pesquisa linhas em uma tabela que corresponda uma linha em outra tabela baseada em um predicado de junção. Por exemplo:

SELECT a.ProductAssemblyID, b.Name, a.PerAssemblyQty
FROM Production.BillOfMaterials AS a
JOIN Production.Product AS b 
ON a.ProductAssemblyID = b.ProductID
WHERE b.ProductID = 900;

Índice não clusterizado ou clusterizado nas colunas ProductID e ProductAssemblyID.

Comparação LIKE

Pesquisa linhas correspondentes que iniciam com uma cadeia de caracteres específica como 'abc%.' Por exemplo:

SELECT CountryRegionCode, Name 
FROM Person.CountryRegion 
WHERE Name LIKE N'D%'

Índice não clusterizado ou clusterizado na coluna Name.

Classificado ou agregado

Requer uma ordem de classificação ou agregação implícita ou explícita (GROUP BY). Por exemplo:

SELECT a.WorkOrderID, b.ProductID, a.OrderQty, a.DueDate 
FROM Production.WorkOrder AS a
JOIN Production.WorkOrderRouting AS b 
ON a.WorkOrderID = b.WorkOrderID
ORDER BY a.WorkOrderID;

Índice não clusterizado ou clusterizado na coluna classificada ou agregada.

Para colunas de classificação, considere especificar a ordem ASC ou DESC da coluna.

Restrição PRIMARY KEY ou UNIQUE

Pesquisa duplicatas de novos valores chave de índice em operações de inserção e atualização, e impõe as restrições PRIMARY KEY e UNIQUE. Por exemplo:

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
VALUES ('OZ1', 'OuncesTest', GetDate());

Índice clusterizado ou não clusterizado na coluna ou colunas definidas na restrição.

A operação UPDATE ou DELETE em uma relação PRIMARY KEY/FOREIGN KEY

Pesquisa linhas em uma operação de atualização ou exclusão da qual a coluna participa em uma relação PRIMARY KEY/FOREIGN KEY, com ou sem a opção CASCADE.

Índice não clusterizado ou clusterizado na coluna chave estrangeira.

A coluna está na lista de seleção mas não no predicado.

Contém uma ou mais colunas na lista de seleção que não são usadas em pesquisas. Por exemplo:

SELECT Title, Revision, FileName
FROM Production.Document
WHERE Title LIKE N'%Maintenance%' AND Revision >= 0';

Índice não clusterizado com FileName especificado na cláusula INCLUDE.