Supongamos que usted tiene una tabla de empleados, así:
CREATE TABLE Employee(EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
HireDate DATETIME,
Salary DECIMAL)
Se podría tener la clave agrupada primaria en EmployeeID, y posiblemente una clave no agrupada en (Apellido, Nombre) para poder encontrar empleados por nombre.
CREATE INDEX NameIndex ON Employee(LastName ASC, FirstName ASC)
Ahora bien, si es necesario encontrar "Joe Murphy" y recuperar su fecha de contratación y el salario, lo que sucede es una búsqueda de índice en su clave basada en el nombre no agrupado (que es bueno), pero luego con el fin para obtener la fecha y el salario de contratación, SQL Server necesita realizar una búsqueda de marcadores en los datos reales de la tabla para obtener el registro de Joe Murphy. Es muy probable que esto genere uno o varios accesos al disco físico (lo cual es malo en términos de rendimiento).
Sin embargo: si el índice no agrupado basado en nombre también especifica "incluyen (HireDate, salario)":
CREATE INDEX NameIndex ON Employee(LastName ASC, FirstName ASC)
INCLUDE (HireDate, Salary)
continuación, SQL Server se realiza una vez que se alzó Joe Murphy en el nombre no agrupado index -> todos los campos para satisfacer su consulta se encuentran en el índice no agrupado, por lo que ya no es necesario hacer una búsqueda de marcadores con uso intensivo de disco y sus consultas serán potencialmente mucho más rápidas.
La desventaja de las columnas INCLUDE es el aumento de la necesidad de espacio en disco por índices no agrupados, ya que tendrán las columnas incluidas en sus nodos a nivel de hoja. Es una compensación entre la velocidad y el tamaño (como de costumbre).
Marc
buena explicación de por qué no se aplica al índice agrupado – Andomar