SQL Server Denali: Indices Columnstore (1)


Índices Columnstore
Denali: Índices Columnstore
Los índices columnstore son muy diferentes a los índices tradicionales porque guardan los datos de cada columna por separado y unen las columnas para completar el índice, mientras que los índices tradicionales agrupan y guardan los datos por fila. Sobre todo para consultas OLAP, SQL Server puede sacar provecho de los nuevos índices para mejorar significativamente los tiempos de ejecución de las consultas. La motivación de esta mejora es que cada vez se usan más los almacenes de datos con enormes cantidades de información. Se ha buscado una solución para hacer más eficiente el acceso a esta información y disminuir los costes de desarrollo de soluciones analíticas.


Un índice columnstore guarda cada columna en un conjunto separado de páginas de disco. Es decir, tenemos un único índice –de hecho sólo se puede definir un índice columnstore por tabla–, pero cada columna se guarda aparte en un número diferente de páginas como si se hiciera un índice exclusivo para esa columna –sin hojas, sólo los datos de la columna–. Esto lo diferencia de los índices «tradicionales» de SQL Server, de almacenamiento en filas y que contienen varias filas por página.

Diagrama Columnstore

Con ello obtenemos importantes beneficios ya que sólo se usan las columnas necesarias para resolver la consulta, por lo tanto, hay que leer menos datos de disco. Además se pueden comprimir bastante los datos porque en una columna se suelen repetir, lo que hace que los ratios de acierto en los cachés de memoria aumenten al estar muy comprimidos los datos.

La tecnología que emplean estos índices es Vertipaq™, que no es exclusiva de SQL Server, sino que se ha implementado también en Analysis Services y en PowerPivot, por lo que es una tecnología nueva para SQL y probada a la vez.

El uso de estos índices es muy sencillo, se han de agrupar todas las columnas necesarias, al crearse páginas aparte por cada columna y usarse sólo las columnas necesarias para resolver la consulta, podemos añadir las columnas que creamos más se usan en distintas consultas sin quitarle eficiencia al índice, al contrario, se la añadimos.Deben ser columnas que estén tanto en la búsqueda (WHERE, JOIN … ON) como en lo que se devuelve (SELECT).

Diagrama Columnstore

Pero debemos tener cuidado con el tamaño de los datos de las columnas, las que tienen tipos de datos grandes no son válidas, por ejemplo, VARCHAR(MAX). Inclusive, nos debemos plantear si, por ejemplo, un VARCHAR(1000) debería formar parte de un índice columnstore. Además con columnstore no existe el concepto de clave, se escogen las páginas de las columnas según se necesiten, por lo que el orden no afecta a la eficiencia. Ahora bien, si la tabla base tiene un índice agrupado, la clave siempre forma parte del índice. No es obligatorio añadirla, pero, si no lo hacemos, internamente SQL Server lo hace.

Hay que tener cuidado con su uso si el conjunto de resultados es muy grande, si no hay agregaciones, uniones o filtros que potencien el procesamiento por lotes, aunque todavía queda el beneficio de la compresión y usar sólo las columnas que se necesitan, y al unir dos tablas grandes. Si vemos que una consulta trabaja peor si se usa el índice columnstore, en vez de alguno de los índices por filas –árbol B o montón–, se pueden usar sugerencias de consulta o sugerencias de índice para solicitar al optimizador de consultas que emplee un índice de filas. Hay una sugerencia de consulta nueva IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX para estos casos.

La principal limitación es que una tabla que tiene un índice de este tipo, no puede actualizarse, aunque más adelante veremos que hay formas de solucionarlo en próximos artículos sobre Índices Columnstore. Además hay otras limitaciones:

  • Máximo de 1.024 columnas.
  • No puede ser agrupado.
  • No puede ser único.
  • No puede ser una clave primaria o una clave externa.
  • No se puede crear en una vista o una vista indexada.
  • No puede incluir una columna dispersa.
  • No tiene columnas incluidas.
  • No se puede cambiar, para hacerlo hay que eliminarlo y construirlo de nuevo.
  • No permiten ni tienen ordenación (ASC or DESC), pues se ordenan según el algoritmo de compresión.
  • No permiten el tipo de búsqueda SEEK.
  • No se pueden combinar con compresión de página o fila, replicación, seguimiento de cambios, captura de datos modificados y filestream.

Los índices columnstore son tecnologías de última generación que se han añadido a SQL Server «Denali» para mejorar exponencialmente las consultas a almacenes de datos. Los usuarios se benefician enormemente al tener menos barreras para el análisis de datos y obtener más valor en menos tiempo usando sus herramientas favoritas de informes. Continua conociendo más aspectos de los indices Columnstore en la segunda parte de este artículo.

> Deseo conocer más sobre Índices Columnstore


 

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
¡Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *