28% de descuento del curso en SQL Server

Estrada Web Group Estrada Web Group
Crear índices en SQL
Estrada Web Group
Estrada Web Group
Estrada Web Group Estrada Web Group
Calificar:
14 septiembre SQL

Cómo crear índices en SQL Server con la instrucción CREATE INDEX

Cómo crear índices en SQL Server con la instrucción CREATE INDEX

Resumen: en este tutorial, aprenderás a usar la instrucción CREATE INDEX de SQL Server para crear índices para tablas.

Introducción a los índices de SQL Server

Un índice es una estructura de datos que mejora la velocidad de recuperación de datos de las tablas. A diferencia de un índice agrupado, un índice ordena y almacena datos por separado de las filas de datos de la tabla. Es una copia de las columnas de datos seleccionadas de una tabla con los enlaces a la tabla asociada.

De manera similar a un índice agrupado, un índice utiliza la estructura de árbol B para organizar sus datos.

Una tabla puede tener uno o más índices y cada índice puede incluir una o más columnas de la tabla.

La siguiente imagen ilustra la estructura del índice no agrupado:

Además de almacenar los valores clave del índice, los nodos hoja también almacenan punteros de fila a las filas de datos que contienen los valores clave. Estos punteros de fila también se conocen como localizadores de fila.

Si la tabla subyacente es una tabla agrupada, el puntero de fila es la clave de índice agrupada. En caso de que la tabla subyacente sea un grupo, el puntero de fila apunta a la fila de la tabla.

Sentencia CREATE INDEX de SQL Server

Para crear un índice, usa la instrucción CREATE INDEX:

CREATE [NONCLUSTERED] INDEX index_name
ON table_name(column_list);

En esta sintaxis:

  • Primero, especifica el nombre del índice después de la cláusula CREATE NONCLUSTERED INDEX. Ten en cuenta que la palabra clave NONCLUSTERED es opcional.
  • En segundo lugar, especifica el nombre de la tabla en la que deseas crear el índice y una lista de columnas de esa tabla como columnas de clave de índice.

Ejemplos de sentencias CREATE INDEX de SQL Server

Usaremos sales.customers de la base de datos de muestra para los ejemplos siguientes.

La tabla sales.customers es una tabla agrupada porque tiene una clave principal customer_id.

A) Uso de la instrucción CREATE INDEX de SQL Server para crear un índice no agrupado para un ejemplo de columna

Esta declaración SELECT encuentra clientes que se ubican en Atwater:

SELECT
    customer_id,
    city
FROM
    sales.customers
WHERE
    city = 'Atwater';

Si vemos el plan de ejecución estimado, verás que el optimizador de consultas escanea el índice agrupado para encontrar la fila. Esto se debe a que la tabla sales.customers no tiene un índice para la columna de la ciudad.

Crear index en SQL Server

Para mejorar la velocidad de esta consulta, puedes crear un nuevo índice llamado ix_customers_city para la columna de la ciudad:

CREATE INDEX ix_customers_city
ON sales.customers(city);

Ahora, si vuelves a ver el plan de ejecución estimado de la consulta anterior, encontrarás que el optimizador de consultas utiliza el índice no agrupado ix_customers_city:

create index optimizar consultas sql server

B) Uso de la declaración CREATE INDEX de SQL Server para crear un índice no agrupado para el ejemplo de varias columnas

La siguiente declaración encuentra al cliente cuyo apellido es Berg y el nombre es Monika:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name = 'Berg' AND
    first_name = 'Monika';

COMO AGREGAR INDICES EN SQL SERVER

El optimizador de consultas escanea el índice agrupado para localizar al cliente.

Para acelerar la recuperación de datos, puedes crear un índice no agrupado que incluya las columnas apellido y nombre:

CREATE INDEX ix_customers_name
ON sales.customers(last_name, first_name);

Ahora, el optimizador de consultas usa el índice ix_customers_name para encontrar al cliente.
 

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name = 'Berg' AND
    first_name = 'Monika';

CREATE INDEX SQL Server

Cuando creas un índice no agrupado que consta de varias columnas, el orden de las columnas en el índice es muy importante. Debes colocar las columnas que utiliza con frecuencia para consultar datos al principio de la lista de columnas.

Por ejemplo, la siguiente declaración busca clientes cuyo apellido es Albert. Debido a que last_name es la columna más a la izquierda en el índice, el optimizador de consultas puede aprovechar el índice y usa el método de búsqueda de índice para buscar:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name = 'Albert';

SQL SERVER CREATE INDEX PARA OPRIMIZAR CONSULTA

La siguiente declaración encuentra clientes cuyo nombre es Adam. También aprovecha el índice ix_customer_name. Pero necesita escanear todo el índice para buscar, lo cual es más lento que la búsqueda de índice.

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    first_name = 'Adam';

como optimizar las consultas sql server

Por lo tanto, es una buena práctica colocar las columnas que usas con frecuencia para consultar datos al comienzo de la lista de las columnas del índice.

En este tutorial, has aprendido sobre los índices no agrupados y cómo usar la instrucción CREATE INDEX de SQL Server para crear índices no agrupados para tablas a fin de mejorar la velocidad de recuperación de datos.

 

Compartir:

Cargando...
Descarga el código fuente

Obten el código del sistema de gestión de proyectos.

Shape