Uso de índices de mapa de bits para reducir el espacio y los costos de escritura en consultas puntuales
Escenarios
Las consultas puntuales en columnas de alta selectividad, como claves primarias, números de pedido e ID de usuario, son comunes en las aplicaciones del mundo real. El enfoque estándar para optimizar el rendimiento de las consultas es indexar estas columnas
Sin embargo, en escenarios de gran volumen de datos, estructura de tabla amplia o importación por lotes, el mecanismo de indexación convencional presenta gradualmente los siguientes problemas:
- El mantenimiento del índice es costoso y el uso del espacio es alto.
- El rendimiento de importación o actualización es limitado, y la sobrecarga de escritura por lotes es costosa.
- Para las columnas con muchos valores duplicados, la tasa de aciertos del índice es baja.
Para resolver estos problemas, DWS proporciona índices de mapa de bits livianos a nivel de columna para tablas HStore. Estos índices aceleran las consultas y minimizan los costos de espacio y escritura. Son especialmente adecuados para optimizar el rendimiento de las consultas puntuales en columnas.
En las tablas HStore, se utilizan índices de mapa de bits, codificación de diccionario y filtros Bloom basados en la distribución de datos en las CU para construir estructuras de índices livianos y soluciones de compresión. En combinación con el mecanismo de ejecución de almacenamiento de columnas de DWS, los índices de mapa de bits pueden mejorar eficazmente las consultas puntuales y reducir significativamente el costo general de E/S, manteniendo una sobrecarga de espacio extremadamente baja.
Los índices de mapa de bits son especialmente adecuados para consultas puntuales de alta frecuencia, columnas de alta repetición y columnas mixtas de uso frecuente y poco frecuente. Mejoran el rendimiento mientras controlan eficazmente los costos de almacenamiento.
Restricciones
- Esta función se implementa en función del almacenamiento híbrido de filas y columnas y solo es compatible con la versión 9.1.1.100 y versiones posteriores.
- Para obtener más información sobre otras restricciones en el almacenamiento híbrido de filas y columnas, consulte Restricciones.
Referencia de sintaxis
Para utilizar un índice de mapa de bits, especifique la columna de mapa de bits (utilizando el parámetro bitmap_columns) al crear una tabla. De esta manera, se puede generar el mapeo de índices de mapa de bits.
Cree una tabla de almacenamiento híbrido de filas y columnas y especifique la columna de mapa de bits. Para obtener más información, consulte CREATE TABLE. (Solo 9.1.1.100 y las versiones posteriores admiten esta función.)
1 2 3 4 5 6 7 8 9 | CREATE TABLE < table name> ( <Column definition> ) WITH ( orientation = column, -- Use the column storage architecture. enable_hstore_opt = on, -- Enable hstore_opt. storage_mode = 'mix' --Create a hybrid row-column store table. bitmap_columns = 'a' --Specify the bitmap column (for example, column a). ); |
Ejemplos
- Utilice el cliente para conectarse a DWS y crear una tabla de datos. Espere aproximadamente 1 minuto porque hay una gran cantidad de datos.
1 2 3 4 5 6 7 8
DROP TABLE IF EXISTS data; CREATE TABLE data(a INT, b BIGINT, c VARCHAR(10), d VARCHAR(10)); INSERT INTO data values(generate_series(1,60000),1,'asdfasdf','gergqer'); INSERT INTO data select * from data; INSERT INTO data select * from data; INSERT INTO data select * from data; INSERT INTO data select * from data; INSERT INTO data select * from data;
- Cree una tabla de almacenamiento híbrido de filas y columnas simple (modo mixto).
1 2 3 4 5 6 7 8 9 10 11 12 13
DROP TABLE IF EXISTS mixmode_test1; CREATE TABLE mixmode_test1 ( a INT, b BIGINT, c VARCHAR(10), d VARCHAR(10) ) WITH ( orientation = column, enable_hstore_opt = on, storage_mode = 'mix', bitmap_columns = 'a' --Specify column a as the bitmap column. );
- Cree un índice de B-tree.
1CREATE INDEX idx_data_a_btree ON mixmode_test1(a);
- Importe datos a la tabla de almacenamiento híbrido de filas y columnas.
1INSERT INTO mixmode_test1 SELECT * FROM data;
- Utilice el escaneo de índice para buscar el registro donde a = 42 e imprima el plan de ejecución.
1 2 3 4
SET enable_seqscan = off; -- Disable sequential scan. SET enable_indexscan = on; -- Use index scan. SET enable_fast_query_shipping = off; -- The optimizer uses the distributed framework, that is, the execution plan is generated on a CN and then sent to the DNs for execution. EXPLAIN PERFORMANCE SELECT * FROM mixmode_test1 WHERE a = 42;
Según los resultados del plan de ejecución, el ejecutor selecciona el escaneo de índice.

- Utilice el escaneo secuencial para buscar registros donde a = 42 e imprima el plan de ejecución.
1 2 3 4 5
SET enable_seqscan = on; -- Enable sequential scan. SET enable_indexscan = off; -- Disable index scan. SET enable_bitmapscan = off; -- Disable bitmap scan. SET enable_fast_query_shipping = off; -- The optimizer uses the distributed framework, that is, the execution plan is generated on a CN and then sent to the DNs for execution. EXPLAIN PERFORMANCE SELECT * FROM mixmode_test1 WHERE a = 42;
Según el resultado del plan de ejecución, se selecciona el escaneo secuencial en el plan de ejecución de consultas puntuales de bitmap_column. El índice automático filtra la mayoría de los datos.
