Servidor SQL: Índices

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Servidor SQL: Índices

Aprender cómo Crear, renombrar y eliminar índices Sintaxis y ejemplos en SQL Server.

¿Qué son los índices en SQL Server?

La indexación es un método de ajuste del rendimiento que permite una recuperación más rápida de los registros. Un índice crea una entrada para cada valor que aparece en la columna indexada.

crear índice

sintaxis

La sintaxis para crear un índice en SQL Server (Transact-SQL) es:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
  ON table_name ( column1 [ASC | DESC ], ...  column_n [ ASC | DESC ] )
  [ INCLUDE ( column1, ... column_n ) ]
  [ WHERE condition ]
  [ WITH ( PAD_INDEX = { ON | OFF }
         | FILLFACTOR = fillfactor
         | SORT_IN_TEMPDB = { ON | OFF }
         | IGNORE_DUP_KEY = { ON | OFF }
         | STATISTICS_NORECOMPUTE = { ON | OFF }
         | STATISTICS_INCREMENTAL = { ON | OFF }
         | DROP_EXISTING = { ON | OFF }
         | ONLINE = { ON | OFF }
         | ALLOW_ROW_LOCKS = { ON | OFF }
         | ALLOW_PAGE_LOCKS = { ON | OFF }
         | MAXDOP = max_degree
         | DATA_COMPRESSION = { NONE | PAGE | ROW }
            [ ON PARTITIONS ( { number | range } ]
  [ ON partition_scheme ( column )
  | ON filegroup
  | ON default_filegroup ]
  [ FILESTREAM_ON { filegroup | partition_scheme };

Solo opcional. Indica que la combinación de valores en la columna indexada debe ser única. La agrupación en clústeres es opcional. Representa que el orden lógico determina el orden físico de las filas en la tabla. No clúster opcional. Indica que el orden lógico no determina el orden físico de las filas de la tabla. index_name El nombre del índice a crear. table_name El nombre de la tabla o vista en la que se va a crear el índice. column1, … column_n Columnas en las que basar el índice. Avance | DESC Orden de clasificación para cada columna. INCLUYE (columna1, … columna_n) Opcional. Una columna que no es una columna clave para agregarse al nivel de hoja de un índice no agrupado. La condición WHERE es opcional. Criterios que determinan las filas a incluir en el índice. ON esquema_partición (columna) Opcional. Indica al esquema de partición que determine el grupo de archivos en el que se asignará la partición. El grupo de archivos ON es opcional. Indica que el índice se creará en el grupo de archivos especificado. ON default_filegroup Opcional. Indica el grupo de archivos predeterminado. FILESTREAM_ON { grupo de archivos | esquema_partición } Opcional. Indica dónde colocar los datos de FILESTREAM para el índice agrupado.

Ejemplo de índice

Veamos un ejemplo de cómo crear un índice en SQL Server (Transact-SQL).

Por ejemplo:

CREATE INDEX contacts_idx
  ON contacts (last_name);

En este ejemplo, creamos un índice en la tabla de contactos llamado contactos_idx. Contiene un solo campo: el campo last_name.

También podemos crear un índice con múltiples campos, como en el siguiente ejemplo:

CREATE INDEX contacts_idx
  ON contacts (last_name, first_name);

En este ejemplo, creamos un índice en la tabla de contactos llamado contactos_idx, pero esta vez consta de los campos apellido y nombre.

Como no especificamos ASC | DESC en cada columna, el índice se creó con cada campo en orden ascendente. Podemos modificar nuestro ejemplo y cambiar el orden de clasificación a descendente de la siguiente manera:

CREATE INDEX contacts_idx
  ON contacts (last_name DESC, first_name DESC);

Este ejemplo de CREATE INDEX creará el índice connections_idx con last_name ordenado en orden descendente y first_name ordenado en orden descendente.

Ejemplo de índice único

A continuación, veamos un ejemplo de cómo crear un índice único en SQL Server (Transact-SQL).

Por ejemplo:

CREATE UNIQUE INDEX contacts_uidx
  ON contacts (last_name, first_name);

Este ejemplo crea un índice en la tabla de contactos llamado contactos_uidx que consta de los campos last_name y first_name, pero también garantiza que solo haya combinaciones únicas de estos dos campos.

Puede modificar aún más este ejemplo para que los índices únicos también se agrupen juntos para que el orden físico de las filas en la tabla esté determinado por el orden lógico de los índices.

Por ejemplo:

CREATE UNIQUE CLUSTERED INDEX contacts_uidx
  ON contacts (last_name, first_name);

Este ejemplo crea un índice llamado contactos_uidx, que es un índice único basado en los campos last_name y first_name, y que también está agrupado, lo que cambia el orden físico de las filas en la tabla.

renombrar índice

sintaxis

La sintaxis para cambiar el nombre de un índice en SQL Server (Transact-SQL) es:

sp_rename 'table_name.old_index_name', 'new_index_name', 'INDEX';

table_name El nombre de la tabla indexada. old_index_name El nombre del índice que se va a renombrar. new_index_name El nuevo nombre del índice.

ejemplo

sp_rename 'contacts.contacts_idx', 'contacts_index_cname', 'INDEX';

En este ejemplo, cambiamos el nombre del índice en la tabla de contactos llamado contactos_idx a contactos_índice_cname.

índice de caída

sintaxis

La sintaxis para eliminar un índice en SQL Server es:

DROP INDEX table_name.index_name;

table_name El nombre de la tabla indexada. index_name El nombre del índice a descartar.

ejemplo

Veamos un ejemplo de cómo colocar un índice en SQL Server (Transact-SQL).

Por ejemplo:

DROP INDEX contacts.contacts_idx;

En este ejemplo, eliminaremos un índice llamado idx_proveedor.