- 02/11/2019
- 4 minutos de lectura
-
- M
- M
- C
- M
- r
-
+9
Se aplica a: SQL Server (todas las versiones compatibles) Azure SQL Database
Un índice es una estructura en el disco asociada con una tabla o vista que acelera la recuperación de filas de la tabla o vista. Un índice contiene claves creadas a partir de una o más columnas en la tabla o vista. Estas claves se almacenan en una estructura (árbol B) que permite a SQL Server encontrar la fila o filas asociadas con los valores clave de forma rápida y eficiente.
Una tabla o vista puede contener los siguientes tipos de índices:
-
Agrupados
- Los índices agrupados ordenan y almacenan las filas de datos en la tabla o vista según sus valores clave. Estas son las columnas incluidas en la definición del índice. Solo puede haber un índice agrupado por tabla, porque las filas de datos en sí pueden almacenarse en un solo orden.
- La única vez que las filas de datos en una tabla se almacenan en orden ordenado es cuando la tabla contiene un índice agrupado. Cuando una tabla tiene un índice agrupado, la tabla se denomina tabla agrupada. Si una tabla no tiene índice agrupado, sus filas de datos se almacenan en una estructura desordenada llamada montón.
-
No agrupado
-
Los índices no agrupados tienen una estructura separada de las filas de datos. Un índice no agrupado contiene los valores clave de índice no agrupado y cada entrada de valor clave tiene un puntero a la fila de datos que contiene el valor clave.
-
El puntero de una fila de índice en un El índice de una fila de datos se denomina localizador de filas. La estructura del localizador de filas depende de si las páginas de datos se almacenan en un montón o en una tabla agrupada. Para un montón, un localizador de filas es un puntero a la fila. Para una tabla agrupada, el localizador de filas es la clave de índice agrupada.
-
Puede agregar columnas sin clave al nivel de hoja del índice no agrupado para omitir los límites de claves de índice existentes, y ejecutar consultas indexadas y totalmente cubiertas. Para obtener más información, consulte Crear índices con columnas incluidas. Para obtener detalles sobre los límites de claves de índice, consulte Especificaciones de capacidad máxima para SQL Server.
-
Tanto los índices agrupados como los no agrupados pueden ser únicos. Esto significa que dos filas no pueden tener el mismo valor para la clave de índice. De lo contrario, el índice no es único y varias filas pueden compartir el mismo valor de clave. Para obtener más información, consulte Crear índices únicos.
Los índices se mantienen automáticamente para una tabla o vista cada vez que se modifican los datos de la tabla.
Consulte Índices para obtener tipos adicionales de índices de propósito especial.
Índices y restricciones
Los índices se crean automáticamente cuando las restricciones PRIMARY KEY y UNIQUE se definen en las columnas de la tabla. Por ejemplo, cuando crea una tabla con una restricción ÚNICA, Motor de base de datos crea automáticamente un índice no agrupado. Si configura una CLAVE PRIMARIA, Motor de base de datos crea automáticamente un índice agrupado, a menos que ya exista un índice agrupado. Cuando intenta aplicar una restricción PRIMARY KEY en una tabla existente y ya existe un índice agrupado en esa tabla, SQL Server aplica la clave principal mediante un índice no agrupado.
Para obtener más información, consulte Crear claves primarias y Cree restricciones únicas.
Cómo utiliza el Optimizador de consultas los índices
Los índices bien diseñados pueden reducir las operaciones de E / S del disco y consumir menos recursos del sistema, por lo que mejoran el rendimiento de las consultas. Los índices pueden ser útiles para una variedad de consultas que contienen instrucciones SELECT, UPDATE, DELETE o MERGE. Considere la consulta SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250
en la base de datos AdventureWorks2012. Cuando se ejecuta esta consulta, el optimizador de consultas evalúa cada método disponible para recuperar los datos y selecciona el método más eficiente. El método puede ser un escaneo de tabla, o puede estar escaneando uno o más índices si existen.
Al realizar un escaneo de tabla, el optimizador de consultas lee todas las filas de la tabla y extrae las filas que coinciden los criterios de la consulta. Una exploración de tabla genera muchas operaciones de E / S de disco y puede consumir muchos recursos. Sin embargo, un escaneo de tabla podría ser el método más eficiente si, por ejemplo, el conjunto de resultados de la consulta es un alto porcentaje de filas de la tabla.
Cuando el optimizador de consultas usa un índice, busca el columnas de clave de índice, encuentra la ubicación de almacenamiento de las filas que necesita la consulta y extrae las filas coincidentes de esa ubicación. En general, buscar en el índice es mucho más rápido que buscar en la tabla porque, a diferencia de una tabla, un índice suele contener muy pocas columnas por fila y las filas están ordenadas.
El optimizador de consultas normalmente selecciona el método más eficiente al ejecutar consultas. Sin embargo, si no hay índices disponibles, el optimizador de consultas debe utilizar una exploración de tabla. Su tarea es diseñar y crear índices que se adapten mejor a su entorno para que el optimizador de consultas tenga una selección de índices eficientes entre los que seleccionar. SQL Server proporciona el Asesor de optimización del motor de base de datos para ayudarlo con el análisis de su entorno de base de datos y en la selección de los índices adecuados.
Importante
Para obtener más información sobre las pautas de diseño de índices e internos, consulte la Guía de diseño de índices de SQL Server.
- Guía de diseño de índices de SQL Server
- Crear índices agrupados
- Crear índices no agrupados Índices