本文涵盖列存表版本要求、与列存索引(IMCI)的区别、行列混用、MPP多机分析等常见问题。
PolarDB哪个版本支持列存表?
PolarDB MySQL版的数据库引擎需为MySQL 8.0.2,且内核小版本需为8.0.2.2.33及以上版本。
列存表与X-Engine高压缩引擎是什么关系?
X-Engine是PolarDB MySQL版自研的存储引擎,得益于MySQL的插件式存储架构,100%兼容MySQL。X-Engine引擎支持两种存储格式:
行存格式(默认):主要用于低成本历史归档存储。
列存格式(从8.0.2.2.33版本起支持):用于低成本高性能数据分析,即列存表。
在CREATE TABLE语句中指定ENGINE=XEngine和TABLE_FORMAT=COLUMN即可创建列存表,不指定TABLE_FORMAT时默认为行存格式。更多用法参见使用指南。
CREATE TABLE sales_records (
sale_id INT PRIMARY KEY AUTO_INCREMENT,
product_id INT NOT NULL,
region VARCHAR(50),
sale_date DATE,
amount DECIMAL(10, 2)
) ENGINE=XEngine TABLE_FORMAT=COLUMN;列存表与列存索引(IMCI)是什么关系?
两者的存储方式和适用场景不同:
列存表:基于X-Engine引擎,数据主表采用列式压缩存储格式,只有一份列存数据。适用于低成本归档和数仓分析场景。
列存索引(IMCI):基于InnoDB引擎,数据主表为行存格式,列存索引是行存表的列存副本。适用于HTAP混合负载场景,高并发点查走行存格式,复杂SQL分析走列存副本。
两者共用同一套列式执行器,均可用于高性能数据分析。
对比项 | X-Engine引擎(列存表) | InnoDB引擎(IMCI列存索引) |
列存表 | 支持 | 不支持 |
列存索引 | 不支持 | 支持 |
适用场景 | 数据归档、数仓分析 | HTAP混合负载,同时处理在线事务和数据分析 |
列存表和列存索引能否一起使用?
可以。同一PolarDB集群支持同时创建InnoDB表和X-Engine表,因此可以同时使用列存表和列存索引(IMCI)。两者定位的场景不同:列存表适合数据量较大的低成本归档和数据分析;列存索引适合同时需要高并发点查和复杂SQL分析的HTAP混合负载场景。
X-Engine行存表和列存表是否可以共存,主要差异是什么?
可以。行存表和列存表属于X-Engine引擎的不同存储格式,可以在同一集群中共存。两者的特点和适用场景对比如下。
对比项 | X-Engine列存表 | X-Engine行存表 |
存储架构 | LSM-tree | LSM-tree |
存储格式 | 列式存储+压缩 | 行存存储+压缩 |
压缩率 | 5~30倍 | 2~5倍 |
实时更新能力 | 中 | 高 |
高并发点查 | 中 | 高 |
复杂SQL分析 | 高 | 低 |
适用场景 | 低成本数仓分析、内外表联邦分析 | 低成本归档、高性价比TP场景(读性能对比InnoDB降低约30%) |
使用列存表做数据分析时,是否需要添加列存只读节点?
不需要。使用列存索引(IMCI)时,需要额外添加列存索引只读节点用于分析。列存表的所有只读节点默认采用列式执行,无需添加专用的列存索引只读节点。扩展读能力只需增加普通只读(RO)节点即可。
读写(RW)节点主要用于数据写入,默认不支持列式执行。建议在集群连接地址配置中,将主库是否接受读设置为否,避免读请求被路由到读写(RW)节点。
主键点查访问列存表为什么性能较低?
列存表的只读节点默认采用列式执行,无法利用主键索引进行点查,只能通过粗糙索引加速查询。如果需要对列存表执行主键点查,可通过SQL Hint关闭列式执行:
SELECT /*+ SET_VAR(USE_IMCI_ENGINE=OFF) */ * FROM t1 WHERE id = 1;如果业务同时需要高并发点查和复杂SQL分析,建议通过创建不同的集群连接地址隔离两类工作负载。详细配置,请参见配置行列执行分流。
列存表是否支持MPP多机分析?
支持。集群中有多个只读节点时,查询会根据代价估算自动判断是否使用多机并行执行,该过程对您是透明的。执行计划中包含Exchange算子时,表示使用了多机执行。
EXPLAIN SELECT COUNT(*) FROM lineitem;
+----+--------------------------+----------+-----------+----------+---------------------------------------------------------------+
| ID | Operator | Name | E-Rows | E-Cost | Extra Info |
+----+--------------------------+----------+-----------+----------+---------------------------------------------------------------+
| 1 | Select Statement | | | | IMCI Execution Plan (max_dop = 8, max_query_mem = 3435973836) |
| 2 | └─Aggregation | | 1 | 14042.14 | |
| 3 | └─Consume | | 1 | 0.00 | Consume ProducerPipeId: 1, Producers: 218552821,505619133 |
| 4 | └─Exchange | | 1 | 14042.14 | PipeId: 1, Consumers: 505619133, Part Type: Gather |
| 5 | └─Aggregation | | 1 | 14032.14 | |
| 6 | └─Table Scan | lineitem | 300018951 | 12000.76 | |
+----+--------------------------+----------+-----------+----------+---------------------------------------------------------------+