Compartir a través de


Tipos de consultas e índices

Cuando se plantee la posibilidad de crear un índice en una columna, tenga en cuenta de qué modo se utilizará la columna en las consultas. En la siguiente tabla se describen los tipos de consulta para los que resultan útiles los índices.

Nota

Los ejemplos de la tabla se basan en la base de datos de ejemplo AdventureWorks2008R2. Al ejecutar los ejemplos de SQL Server Management Studio, para ver los índices seleccionados por el optimizador de consultas, muestre el plan de ejecución real. Para obtener más información, vea Cómo mostrar un plan de ejecución real.

Consulta en la que el predicado de la columna es uno de los siguientes

Descripción de la consulta y ejemplo

Índice que se tendrá en cuenta

Coincidencia exacta con un valor específico

Busca una coincidencia exacta en la que la consulta utiliza la cláusula WHERE para especificar una entrada de columna con un valor específico. Por ejemplo:

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

Un índice clúster o no clúster de la columna BusinessEntityID.

Una coincidencia exacta con un valor de una lista IN (x,y,z)

Busca una coincidencia exacta con un valor de una lista de valores especificada. Por ejemplo:

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

Un índice clúster o no clúster de la columna BusinessEntityID.

Intervalo de valores

Busca un intervalo de valores en el que la consulta especifica cualquier entrada que tenga un valor que se encuentre entre dos valores. Por ejemplo:

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

O bien

WHERE ProductModelID >= 1 AND ProductModelID <= 5

Un índice clúster o no clúster de la columna ProductModelID.

Combinación de tablas

Busca filas de una tabla que coincidan con una fila de otra tabla a partir de un predicado de combinación. Por ejemplo:

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;

Un índice clúster o no clúster de las columnas ProductID y ProductAssemblyID.

Comparación LIKE

Busca filas coincidentes que empiecen por una cadena de caracteres específica, como 'abc%'. Por ejemplo:

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

Un índice clúster o no clúster de la columna Name.

Ordenada o agregada

Requiere un criterio de ordenación implícito o explícito o una agregación (GROUP BY). Por ejemplo:

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 clúster o no clúster de la columna ordenada o agregada.

En el caso de las columnas ordenadas, considere la posibilidad de especificar el orden ASC o DESC de la columna.

Restricción PRIMARY KEY o UNIQUE

Busca duplicados de nuevos valores de clave de índice en operaciones de inserción y actualización para forzar las restricciones PRIMARY KEY y UNIQUE. Por ejemplo:

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

Índice clúster o no clúster de las columnas definidas en la restricción.

Operación UPDATE o DELETE en una relación PRIMARY KEY/FOREIGN KEY

Busca filas en una operación de actualización o eliminación en las que la columna interviene en una relación PRIMARY KEY/FOREIGN KEY, con o sin la opción CASCADE.

Un índice clúster o no clúster de la columna de clave externa.

La columna se encuentra en la lista de selección, pero no en el predicado.

Incluye una o varias columnas de la lista de selección que no se utilizan para realizar búsquedas. Por ejemplo:

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

Índice no clúster con FileName especificado en la cláusula INCLUDE.