¿Cómo funciona el índice primario disperso en ClickHouse?
El índice primario disperso en ClickHouse ayuda a identificar de forma eficiente los gránulos —bloques de filas— que podrían contener datos que coincidan con la condición de una consulta sobre las columnas de la clave primaria de la tabla. En la siguiente sección, explicamos cómo se construye este índice a partir de los valores de esas columnas.
Creación del índice primario disperso
Para su procesamiento, los datos de cada columna se ④ dividen lógicamente en gránulos; cada uno abarca 8.192 filas y constituye la unidad más pequeña con la que trabajan los mecanismos de procesamiento de datos de ClickHouse. Esta estructura de gránulos también es lo que hace que el índice primario sea disperso: en lugar de indexar cada fila, ClickHouse almacena ⑤ los valores de la clave primaria de una sola fila por gránulo, concretamente la primera. Esto da como resultado una entrada de índice por gránulo:
Gracias a su naturaleza dispersa, el índice primario es lo bastante pequeño como para caber por completo en memoria, lo que permite filtrar rápidamente las consultas con predicados sobre columnas de la clave primaria. En la siguiente sección, mostramos cómo ayuda a acelerar esas consultas.
A continuación, mostramos de forma esquemática cómo se utiliza el índice primario disperso para acelerar las consultas con otra animación:
① La consulta de ejemplo incluye un predicado sobre ambas columnas de la clave primaria:
town = 'LONDON' AND street = 'OXFORD STREET'.
② Para acelerar la consulta, ClickHouse carga en memoria el índice primario de la tabla.
③ A continuación, examina las entradas del índice para identificar qué gránulos podrían contener filas que coincidan con el predicado; es decir, qué gránulos no se pueden omitir.
④ Después, estos gránulos potencialmente relevantes se cargan y se procesan en memoria, junto con los gránulos correspondientes de cualquier otra columna necesaria para la consulta.
Supervisión de índices primarios
Puntos clave
- Los índices primarios dispersos ayudan a ClickHouse a omitir datos innecesarios al identificar qué gránulos podrían contener filas que coincan con las condiciones de la consulta en las columnas de la clave primaria.
- Cada índice almacena solo los valores de la clave primaria de la primera fila de cada gránulo (un gránulo tiene 8,192 filas de forma predeterminada), lo que lo hace lo bastante compacto como para caber en memoria.
- Cada parte de datos de una tabla MergeTree tiene su propio índice primario, que se utiliza de forma independiente durante la ejecución de consultas.
- Durante las consultas, el índice permite a ClickHouse omitir gránulos, lo que reduce la E/S y el uso de memoria, a la vez que mejora el rendimiento.
-
Puede inspeccionar el contenido del índice mediante la función de tabla
mergeTreeIndexy supervisar el uso del índice con la cláusulaEXPLAIN.