Índices – Teoría y ejercicios

Índices en SQL Server

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,textvarchar (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