TDSQL-C MySQL 版 支持的语句和受限场景

这里说明 CSI(Column store Index)列存索引功能支持的语句和受限场景。

相关产品
TDSQL-C MySQL 版 产品页,含版本规格、价格与购买入口。

一、前提条件

内核版本为 TDSQL-C MySQL 版8.0 3.1.20.001及以上。

注意:说明:

注意:针对只读实例而言,符合版本要求的情况下,4核以上的只读实例才可以开启列存索引功能。

二、支持的语句

TDSQL-C MySQL 版已经实现了具备如下特征的 SQL 语句的计算下压查询处理,并在逐渐完善更多的功能场景。

功能场景 说明
单表扫描 对于单表扫描,支持全表扫描、索引扫描、索引范围扫描等扫描类型的正序、逆序扫描。
多表 join 对于多表 Join,支持 Nested loop Join、HashJoin、Sort Merge Join 等多种 Join 算法。
子查询 对于子查询,支持非关联子查询。
集合查询 对于集合查询,支持 UNION/UNION ALL 查询及 SELECT DISTINCT 去重。
分组排序与分页 对于分组排序与分页,支持 GROUP BY 分组、HAVING 过滤、ORDER BY 排序、LIMIT/OFFSET 分页。
数据类型 对于数据类型,支持带多种数据类型的查询,包括整型数据、字符型数据、浮点型数据、时间型数据等。
运算公式 支持算术表达式运算(+、-、*、%、/、|、&、^、<<、>>、~等),条件表达式运算(<、<=、>、>=、<>、between/and、In 等),逻辑运算(or、and、not 等),类型转换(CAST/CONVERT),控制流函数(CASE WHEN、IF、IFNULL、COALESCE 等),一般函数(字符函数、整型函数、时间函数、窗口函数等),聚合函数(count/sum/avg/min/max 等)。
查看下压执行计划 支持 Explain 查看下压执行计划,但只有在 Explain format=tree 中才能显示 COLUMNSTORE 标记。

三、功能限制

TDSQL-C MySQL 版将持续迭代 CSI 查询的能力,当前无法使用 CSI 查询的场景如下:

四、创建 CSI 的限制

·同一张表只能创建一个 CSI 索引,若数据库内核版本为3.1.13及以上,则单个索引最多可包含256个字段;若数据库内核版本为3.1.13以下,则单个索引最多可包含16个字段。

注意:说明:

注意:只要对应字段包含在 CSI 索引中,均可命中索引,无需满足前缀匹配条件。

·不支持使用 Generated Column、BLOB、TEXT、JSON、BIT 和 GEOMETRY 来创建 CSI。

·不支持使用 COPY 算法创建或删除 CSI,或先删除再加 CSI。

·非 InnoDB 表不支持创建 CSI。

五、对 CSI 表的 DDL 限制

·不支持对 CSI 表进行分区操作。

六、SELECT 使用 CSI 的限制

·不支持 DML 中的 SELECT,包括 INSERT … SELECT/REPLACE … SELECT。

·不支持 CTE。

·不支持窗口函数。

·不支持 with rollup。

·不支持 UNION。

·不支持 ReadCommit 外的隔离级别的事务。

·不支持加锁读语句,例如 SELECT FOR UPATE/SHARE LOCK。

·不支持 Stored Procedure。

·不支持 MODE_PAD_CHAR_TO_FULL_LENGTH/MODE_INVALID_DATES的 SQL_MODE。

·不支持 GIS 相关函数(如 SP_WITHIN_FUNC、st_distance 等)。

·不支持用户自定义函数。

·不支持 XML 相关函数(xml_str)。

·不支持 lock 相关的函数(is_free_lock、is_used_lock、release_lock、release_all_locks、get_lock)。

七、注意事项

CSI 查询与普通查询执行结果存在一定的不兼容,包括以下几点。

·结果集无序

当不指定 ORDER 序时,由于列存的组织方式与 BTree 的组织方式不同,返回的结果集可能与 BTR 执行的结果序不一致。实际上这符合 ANSI 的标准,但是用户对于结果集顺序敏感时,建议指定排序规则来获取与串行一致的结果。

·精度与截断问题

使用 CSI 时,由于部分数据类型的存储和计算精度与 MySQL 不完全一致,因此可能会导致浮点部分产生精度差别或者产生截断,导致最终结果有细微的差别。

·错误或告警提示次数可能会增多

对于在串行执行中出现错误/告警提示的查询,当使用 CSI 时采用并行执行的情况下,每个工作线程可能都会提示错误/告警,导致总体错误/告警提示数增多。

·资源影响

CSI 的 buffer pool 会占系统内存空间。

CSI 的并行执行时,相比串行查询的单线程模式,并行查询会消耗更多的线程、内存和 IO 资源。

赞 (0)
上一篇 4天前
下一篇 4天前