Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de datos SQL de Microsoft Fabric
Recomendaciones de alto nivel para diseñar índices de almacén de columnas. Unas pocas decisiones adecuadas en cuanto al diseño le pueden ayudar a lograr el alto rendimiento de compresión de datos y de consultas para el que se han diseñado los índices de almacén de columnas.
En este artículo se supone que está familiarizado con la terminología y la arquitectura de los almacenes de columna. Para obtener más información, vea Índices de almacén de columnas: Información general y Arquitectura de índices de almacén de columnas.
Antes de diseñar un índice de almacén de columnas, comprenda tanto como sea posible los requisitos de datos. Por ejemplo, reflexione sobre las respuestas a estas preguntas.
Podría no necesitar un índice de almacén de columnas. Las tablas de almacén de filas (o árbol B) con montones o índices agrupados funcionan mejor en las consultas que buscan en los datos, ya que buscan un valor determinado, o para consultas en un pequeño intervalo de valores. Use índices de almacén de filas en las cargas de trabajo transaccionales, ya que tienden a necesitar búsquedas de tabla, más que recorridos de tabla de rangos grandes.
Un índice de almacén de columnas puede ser agrupado o no agrupado. Un índice de almacén de columnas agrupado puede tener uno o varios índices de árbol B no agrupados. Los índices de almacén de columnas son fáciles de probar. Si crea una tabla como un índice de almacén de columnas, puede convertir fácilmente la tabla en una tabla de almacén de filas quitando el índice de almacén de columnas.
A continuación se muestra un resumen de las opciones y recomendaciones.
Opción de almacenamiento de columnas | Recomendaciones sobre cuándo usar | Compresión |
---|---|---|
Índice de almacenamiento por columnas agrupado | Se utiliza para: 1) Carga de trabajo de almacenamiento de datos tradicional con un esquema de estrella o copo de nieve 2) Cargas de trabajo de Internet de las cosas (IoT) que insertan grandes volúmenes de datos con mínimas actualizaciones y eliminaciones. |
Promedio de 10 veces |
Índices de almacén de columnas ordenados | Úselo cuando se consulta un índice de almacén de columnas agrupado a través de una sola columna de predicado ordenada o un conjunto de columnas. Esta guía es similar a elegir las columnas de clave para un índice agrupado de almacén de filas, aunque los grupos de filas subyacentes comprimidos se comportan de manera diferente. Para obtener más información, consulte Crear un índice de almacén de columnas y Ajuste del rendimiento con índices de almacenes de columnas ordenados. | Promedio de 10 veces |
Índices de árbol B no agrupados en un índice de almacén de columnas agrupado | Se utiliza para: 1. Exigir restricciones de clave principal y clave externa en un índice de almacén de columnas agrupado. 2. Acelerar consultas que buscan valores específicos o pequeños rangos de valores. 3. Acelerar actualizaciones y eliminaciones de filas específicas. |
Promedio de 10 veces más algún tipo de almacenamiento adicional para las NCI. |
Índice de almacén de columnas no agrupado en un índice basado en disco de montículo o árbol B | Se utiliza para: 1) Una carga de trabajo OLTP que tiene algunas consultas de análisis. Puede quitar los índices de árbol B creados para el análisis y reemplazarlos por un índice de almacén de columnas no agrupado. 2) Muchas cargas de trabajo OLTP tradicionales que realizan operaciones de extracción, transformación y carga (ETL) para mover datos a un almacenamiento de datos independiente. Puede eliminar ETL y un almacenamiento de datos independiente mediante la creación de un índice de almacén de columnas no agrupado en algunas de las tablas OLTP. |
NCCI es un índice adicional que requiere un 10 % más de almacenamiento de promedio. |
Índice de almacén de columnas en una tabla en memoria | Se aplican las mismas recomendaciones que para el índice de almacén de columnas no agrupado en una tabla basada en disco, salvo que la tabla base es una tabla en memoria. | El índice columnstore es un índice adicional. |
El índice de almacén de columnas agrupado es más que un índice: es el almacenamiento de la tabla principal. Consigue una compresión de datos alta y una mejora significativa en el rendimiento de las consultas en las tablas de dimensiones y hechos de almacenamiento de datos de gran tamaño. Los índices de almacén de columnas agrupados son más adecuados para las consultas de análisis que para las consultas transaccionales, puesto que las consultas de análisis tienden a realizar operaciones en grandes rangos de valores en lugar de buscar valores específicos.
Considere el uso de un índice de almacén de columnas agrupado cuando:
No utilice un índice de almacén de columnas agrupado cuando:
Para obtener más información, consulte Índices de almacén de columnas en el almacenamiento de datos.
Para obtener disponibilidad de índices de almacén de columnas ordenados, consulte Índices de almacén de columnas: Información general.
Considere la posibilidad de usar un índice de almacén de columnas ordenado en los escenarios siguientes:
Es posible que un índice de almacén de columnas ordenado no sea tan efectivo en estos escenarios:
ALTER INDEX REORGANIZE
.A partir de SQL Server 2016 (13.x), puede crear índices no agrupados de árbol B o almacén de filas como índices secundarios en un índice de almacén de columnas agrupado. El índice B-tree no agrupado se actualiza a medida que ocurren cambios en el índice columnstore. Se trata de una característica eficaz que puede usar en su propio beneficio.
Mediante el uso del índice de árbol B secundario, puede buscar eficazmente filas específicas sin recorrer todas las filas. También habrá disponibles otras opciones. Por ejemplo, puede aplicar una restricción de clave principal o externa mediante una restricción UNIQUE en el índice de árbol B. Dado que un valor no único no se puede insertar en el índice de árbol B, SQL Server no puede insertar el valor en el almacén de columnas.
Considere la posibilidad de usar un índice de árbol B en un índice de almacén de columnas para:
A partir de SQL Server 2016 (13.x), puede tener un índice de almacén de columnas no agrupado en una tabla basada en disco de almacén de filas o en una tabla OLTP en memoria. Esto permite ejecutar el análisis en tiempo real en una tabla transaccional. Mientras las transacciones se produzcan en la tabla subyacente, puede ejecutar el análisis en el índice de almacén de columnas. Puesto que una tabla administra ambos índices, los cambios están disponibles en tiempo real en los índices de almacén de filas y de almacén de columnas.
Puesto que un índice de almacén de columnas consigue una compresión de datos 10 veces mejor que un índice de almacén de filas, dicho índice solo necesita una pequeña cantidad de almacenamiento adicional. Por ejemplo, si la tabla de almacén de filas comprimida tarda 20 GB, el índice de almacén de columnas podría requerir 2 GB adicionales. El espacio adicional necesario también depende del número de columnas del índice de almacén de columnas no agrupado.
Considere el uso de un índice de almacén de columnas no agrupado para:
Realice análisis en tiempo real en una tabla transaccional de tipo rowstore. Puede reemplazar los índices existentes de árbol B que estén diseñados para realizar análisis por un índice de almacén de columnas no agrupado.
Elimine la necesidad de un almacenamiento de datos independiente. Tradicionalmente, las empresas ejecutan transacciones en una tabla de almacén de filas y luego cargan los datos en un almacenamiento de datos independiente para ejecutar el análisis. Para muchas cargas de trabajo, puede eliminar el proceso de carga y el almacenamiento de datos independiente mediante la creación de un índice de almacén de columnas no agrupado en tablas transaccionales.
SQL Server 2016 (13.x) ofrece varias estrategias para hacer que este escenario sea más eficaz. Es fácil probarlo, ya que puede habilitar un índice de almacén de columnas no agrupado sin cambios en la aplicación OLTP.
Para agregar recursos de procesamiento adicionales, puede ejecutar el análisis en un lugar secundario legible. El uso de un elemento secundario legible separa el procesamiento de la carga de trabajo transaccional y la carga de trabajo de análisis.
Para más información, consulte Cómo empezar con Columnstore para análisis operativos en tiempo real
Para más información sobre cómo elegir el mejor índice de almacén de columnas, vea el blog de Sunil Agarwal Which columnstore index is right for my workload? (¿Qué índice de almacén de columnas es adecuado para mi carga de trabajo?).
Los índices de columna admiten la creación de particiones, que es una buena manera de administrar y archivar datos. La creación de particiones mejora el rendimiento de consultas limitando las operaciones a una o más particiones.
Para tablas grandes, el único método práctico para administrar rangos de datos es mediante el uso de particiones. Las ventajas de las particiones para tablas de almacén de filas también se aplican a los índices de almacén de columnas.
Por ejemplo, tanto las tablas rowstore como columnstore utilizan particiones para:
Además, con un índice de almacén de columnas, la creación de particiones se utiliza para:
COLUMNSTORE_ARCHIVE
compresión. El rendimiento de las consultas puede ser más lento, lo que podría ser aceptable si la partición se consulta con poca frecuencia.Mediante el uso de particiones, puede limitar las consultas para recorrer solo las particiones específicas, lo que limita el número de filas para recorrer. Por ejemplo, si el índice tiene particiones por año y la consulta está analizando los datos del año pasado, solo necesita recorrer los datos de una partición.
A menos que tenga un tamaño de datos suficientemente grande, un índice de almacén de columnas funciona mejor con menos particiones de las que podría usar para un índice de almacén de filas. Si no tiene al menos un millón de filas por partición, la mayoría de las filas podrían ir al almacén delta donde no disfrutan de la ventaja de rendimiento de la compresión del almacén de columnas. Por ejemplo, si carga un millón de filas en una tabla con 10 particiones y cada partición recibe 100.000 filas, todas las filas van a los grupos de filas delta.
Ejemplo:
Para más información sobre la creación de particiones, vea la publicación de blog de Sunil Agarwal, Should I partition my columnstore index? (¿Debo particionar mi índice de almacén de columnas?).
El índice de almacén de columnas ofrece dos opciones para la compresión de datos: compresión de almacén de columnas y compresión de archivo. Puede elegir la opción de compresión al crear el índice, o cambiarla más adelante con ALTER INDEX ... REBUILD.
La compresión del almacén de columnas suele alcanzar tasas de compresión 10 veces superiores a los índices de almacén de filas. Es el método de compresión estándar para los índices de almacén de columnas y permite un rendimiento de consultas rápido.
La compresión de archivos está diseñada para una compresión máxima cuando el rendimiento de consultas no es tan importante. Logra mayores tasas de compresión de datos que la compresión del almacén de columnas, pero tiene un precio. Tarda más tiempo en comprimir y descomprimir los datos, por lo que no es adecuada para el rendimiento de consultas rápido.
Si los datos ya están en una tabla de almacén de filas, puede utilizar CREATE COLUMNSTORE INDEX para convertir la tabla en un índice de almacén de columnas agrupado. Hay algunas optimizaciones que mejorarán el rendimiento de consultas después de convertir la tabla, tal y como se describe a continuación.
Puede configurar el número máximo de procesadores para convertir un índice agrupado de árbol B o de montón en un índice de almacén de columnas. Para configurar los procesadores, utilice el grado máximo de la opción de paralelismo (MAXDOP).
Si tiene grandes cantidades de datos, MAXDOP 1
puede ser demasiado lento. El aumento de MAXDOP a 4
funciona bien. Si el resultado es que algunos grupos de filas no tienen el número óptimo de filas, puede ejecutar ALTER INDEX REORGANIZE para mezclarlos en segundo plano.
Dado que el índice de árbol B ya almacena filas en un orden determinado, conservar ese orden cuando las filas se comprimen en el índice de almacén de columnas puede mejorar el rendimiento de consultas.
El índice del almacén de columnas no ordena los datos, pero utiliza metadatos para realizar el seguimiento de los valores mínimo y máximo de cada segmento de columna en cada grupo de filas. Al recorrer un rango de valores, puede calcular rápidamente cuándo omitir el grupo de filas. Cuando los datos se ordenan, se pueden omitir más grupos de filas.
Para conservar el orden de clasificación durante la conversión:
Utilice CREATE COLUMNSTORE INDEX con la cláusula DROP_EXISTING. Esto también conserva el nombre del índice. Si tiene scripts que ya utilizan el nombre del índice del almacén de filas, no necesitará actualizarlos.
En este ejemplo, se convierte un índice rowstore agrupado en una tabla denominada MyFactTable
en un índice columnstore agrupado. El nombre del índice, ClusteredIndex_d473567f7ea04d7aafcac5364c241e09
, permanece igual.
CREATE CLUSTERED COLUMNSTORE INDEX ClusteredIndex_d473567f7ea04d7aafcac5364c241e09
ON MyFactTable
WITH (DROP_EXISTING = ON);
Cada grupo de filas contiene un segmento de cada columna de la tabla. Cada sector de columna se comprime junto y se almacena en un medio físico.
Hay metadatos con cada segmento para permitir la eliminación rápida de segmentos sin leerlos. Las elecciones de tipo de datos podrían tener un impacto significativo en el rendimiento de las consultas, basado en los predicados de filtro comunes para consultas en el índice de almacén de columnas. Para obtener más información, consulte eliminación de segmentos.
Se trata de tareas para crear y mantener índices de almacén de columnas.
Tarea | Artículos de referencia | Notas |
---|---|---|
Cree una tabla como un almacén de columnas. | CREATE TABLE (Transact-SQL) | A partir de SQL Server 2016 (13.x), puede crear la tabla como un índice agrupado de almacén de columnas. No es necesario crear primero una tabla de almacén de filas y, luego, convertirla en almacén de columnas. |
Cree una tabla de memoria con un índice de almacén de columnas. | CREATE TABLE (Transact-SQL) | Desde SQL Server 2016 (13.x), puede crear una tabla optimizada para memoria con un índice de almacén de columnas. El índice de almacén de columnas también se puede agregar una vez creada la tabla mediante la sintaxis de ALTER TABLE ADD INDEX. |
Convertir una tabla rowstore en una tabla columnstore. | CREATE COLUMNSTORE INDEX (Transact-SQL) | Convierta un montículo o árbol B existentes en un almacén de columnas. Los ejemplos muestran cómo tratar los índices existentes, así como el nombre del índice, al realizar esta conversión. |
Convierta una tabla de almacén de columnas en un almacén de filas. | CREATE CLUSTERED INDEX (Transact-SQL) o Conversión nuevamente de una tabla de almacén columnar en un montón de filas | Habitualmente, esta conversión no es necesaria pero puede haber ocasiones en las que necesite realizarla. Los ejemplos muestran cómo convertir un almacén de columnas en un montón o un índice agrupado. |
Cree un índice de almacén de columnas en una tabla de almacén de filas. | CREATE COLUMNSTORE INDEX (Transact-SQL) | Una tabla de almacenamiento de filas puede tener un índice de almacenamiento de columnas. Desde SQL Server 2016 (13.x), los índices de almacén de columnas pueden tener una condición de filtrado. En los ejemplos se usa la sintaxis básica. |
Crear índices de rendimiento para análisis operativos. | Comienza con Columnstore para análisis operacionales en tiempo real | Se describe cómo crear índices de árbol B y de almacén de columnas complementarios para que las consultas OLTP usen índices de árbol B y las consultas de análisis utilicen índices de almacén de columnas. |
Cree índices de almacén de columnas de rendimiento para el almacenamiento de datos. | Índices de almacén de columnas en el almacenamiento de datos | Se describe cómo usar índices B-tree en tablas columnstore para crear consultas de alto rendimiento para almacenamiento de datos. |
Use un índice de árbol B para aplicar una restricción de clave principal en un índice de almacén de columnas. | Índices de almacén de columnas en el almacenamiento de datos | Se muestra cómo combinar índices de árbol B y de almacén de columnas para aplicar restricciones de clave principal en el índice de almacén de columnas. |
Eliminar un índice de almacén de columnas | DROP INDEX (Transact-SQL) | Para eliminar un índice de almacén de columnas, se usa la sintaxis de DROP INDEX estándar que usan los índices de árbol B. Si se elimina un índice de almacén de columnas agrupado, la tabla de almacén de columnas se convierte en un montón. |
Eliminar una fila de un índice de almacén de columnas | DELETE (Transact-SQL) | Use DELETE (Transact-SQL) para eliminar una fila. Fila almacén de columnas: SQL Server marca la fila como eliminada lógicamente, pero no recupera el almacenamiento físico de la fila hasta que se vuelva a generar el índice. Fila de almacén delta: SQL Server elimina lógica y físicamente la fila. |
Actualizar una fila en el índice columnstore. | UPDATE (Transact-SQL) | Use UPDATE (Transact-SQL) para actualizar una fila. Fila almacén de columnas: SQL Server marca la fila como eliminada lógicamente y, después, inserta la fila actualizada en el almacén delta. Fila deltastore: SQL Server actualiza la fila en el deltastore. |
Forzar que todas las filas del almacén delta vayan al almacén de columnas. | ALTER INDEX (Transact-SQL) ... REBUILD Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos |
ALTER INDEX con la opción REBUILD hace que todas las filas vayan al almacén de columnas. |
Desfragmentación de un índice de almacén de columnas | ALTER INDEX (Transact-SQL) | ALTER INDEX ... REORGANIZE desfragmenta los índices de almacén de columnas en línea. |
Combine tablas con índices de almacén de columnas. | MERGE (Transact-SQL) |
Para crear un índice de almacén de columnas vacío para:
Para más información sobre cómo convertir un montón de almacén de filas o un índice B-tree existente en un índice de almacén de columnas agrupado, o para crear un índice de almacén de columnas no agrupado, consulte CREATE COLUMNSTORE INDEX (Transact-SQL).
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyCursos
Ruta de aprendizaje
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Documentación
Rendimiento de las consultas de índices de almacén de columnas - SQL Server
Recomendaciones de rendimiento de consultas de índice de almacén de columnas para lograr el rendimiento rápido de las consultas.
Introducción a los índices de almacén de columnas - SQL Server
Información general sobre los índices de almacén de columnas. Los índices de almacén de columnas son el estándar para almacenar y consultar tablas de hechos de almacenamiento de datos de gran tamaño.
Índices de almacén de columnas: Guía de carga de datos - SQL Server
Opciones de carga de datos y recomendaciones para cargar datos en un índice de almacén de columnas mediante los métodos de inserción gradual y carga masiva SQL estándar.