
Índices en SQL Server
Un índice se puede definir como un objeto que ordena los registros de una tabla o vista por uno o más campos de manera ascendente o descendente.
Importante
- Es recomendable crear índices para optimizar las consultas.
- Se pueden crear un índice agrupado, que se crea de manera automática en la tabla con clave primaria (primary key) y 999 índices no agrupados en la misma tabla o vista.
- En la lista de campos por el cual va a ordenar los registros de la tabla o vista pueden haber hasta 32 campos.
- El orden puede ser ascendente (Asc) o descendente (Desc). El valor por defecto es Asc.
- Las columnas con tipos de datos ntext,text, varchar (max), nvarchar(max), varbinary (max), xml, o imagen no se pueden crear índices.
- Se puede crear índices para las tablas particionadas, estos índices se les llama índices particionados. (Ver índices particionados)
Sintaxis
Para la creación de índices vamos a dividir la sintaxis de acuerdo al tipo de índice.
Crear un índice no agrupado
Create nonclustered index NombreDelIndice on Tabla/Vista (Camp1 orden[, Campo2 orden])
go
Crear un índice agrupado
Create clustered index NombreDelIndice on Tabla/Vista (Camp1 orden[, Campo2 orden])
go
Crear un índice único
Create unique index NombreDelIndice on Tabla/Vista (Camp1 orden[, Campo2 orden])
go
Crear un índice filtrado
Create index NombreDelIndice on Tabla/Vista (Camp1 orden[, Campo2 orden])
where ExpresiónLógica
go
Crear un índice con factor de relleno
Create index NombreDelIndice on Tabla/Vista (Camp1 orden[, Campo2 orden])
with fillfactor = Valor
go
Crear un índice y sobre escribir el existente
Create index NombreDelIndice on Tabla/Vista (Camp1 orden[, Campo2 orden])
with drop_existing = on
go
Ejercicios
Usando la base de datos Norwhwind
use northwind
go
1. Crear un índice para la tabla Categories, campo CategoryName
Create index CategoriaNombreIDX on Categories (CategoryName asc)
go
2. Ver los índices de la tabla Categorias, suponer que los nombres de los índices comienzan con la palabra Categoria.
select * from sys.indexes where name like ‘Categoria%’
go

3. Ver la estructura de la tabla, también se presentan la lista de indexados creados en la tabla.
sp_help Categories
go

4. Crear un índice para los productos que tengan un precio mayor a 30
Create index ProductosPrecioMas30IDX on Products(UnitPrice)
where UnitPrice > 30
go
5. Crear un índice único para los productos por el campo ProductName
Create unique index ProductosNombreIDX on Products(ProductName)
go
6. Crear un índice para empleados por los campos LastName y FirstName
Create index EmpleadosNombreCompletoIDX on Employees(LastName, FirstName)
go
7. Crear un índice para el campo UnitsInStock en la tabla Products con factor de relleno de 70
Create index ProductosStockIDX on Products(UnitsInStock)
with fillfactor = 70
go
8. Crear un índice para el nombre del cliente (campo CompanyName) en Customers. Asignar un factor de relleno de 70 y sobre escribir el existente. Usar la estructura If para comprobar que el índice existe
if not exists (select * from sys.indexes where name = ‘ClientesNombreIDX’)
Begin
Create index ClientesNombreIDX on Customers(CompanyName)
with fillfactor = 70
End
else
Begin
Create index ClientesNombreIDX on Customers(CompanyName)
with (fillfactor = 70, drop_existing = on)
End
go