一、背景
为了解决这类问题,TDSQL-C MySQL 版推出了 CSI(Column store Index)列存索引功能。该功能使用列式数据格式存储、检索和管理数据的技术,可实现更好的查询性能和更高的数据压缩率。
二、功能优势
相比传统的基于行的存储方式,列存索引使用基于列的数据存储和查询处理,可以实现一个量级的查询性能提升。此外,列存储更有利于数据压缩,相比行存储,可以降低近一个量级的存储空间。
三、支持版本
内核版本 TDSQL-C MySQL 版8.0 3.1.20.001及以上。
注意:说明:
注意:针对只读实例而言,符合版本要求的情况下,4核以上的只读实例才可以开启列存索引功能。
四、应用场景
·在线报表,数据看板等对在线数据有实时数据分析需求的场景。
·大数据量分析型查询场景。
五、技术原理
TDSQL-C MySQL 版的列存索引能力,基于如下3个关键技术点实现:
1. 行列数据的混合存储
在 TDSQL-C MySQL 版中,数据默认以行式存储。为了更好地支持分析查询,列式存储是更为合适的选择。在统一的架构上,我们采用了为行存表创建列存索引的方式,达到数据混合存储的目的。
2. 行列混合计划的生成与调度执行
TDSQL-C MySQL 版基于优化器的统计信息、代价模型,让列存索引适配当前行存优化器模型,并参与 CBO(代价优化器)的搜索空间。进而执行计划片断下压,基于片断执行混合调度。
3. 高效计算
由于数据是以列式单独存储于数据块中的,计算时只读取所需要的列数,从而可以大大减少 IO 层的开销,特别是大宽表的场景。并且,列式数据可以按更紧凑的方式存储在内存中,使用列存索引 CSI 计算时,各个算子尽量按批处理多行的列数据,充分发挥 CPU 的 cache 亲和力,从而可以提高计算效率。