tencent cloud

文档反馈

支持的语句和受限场景

最后更新时间:2024-06-07 16:54:08
    本文为您介绍 CSI(Column store Index)列存索引功能支持的语句和受限场景。

    前提条件

    内核版本为 TDSQL-C MySQL 版8.0 3.1.14及以上。
    说明:
    针对只读实例而言,符合版本要求的情况下,4核以上的只读实例才可以开启列存索引功能。

    支持的语句

    TDSQL-C MySQL 版已经实现了具备如下特征的 SQL 语句的计算下压查询处理,并在逐渐完善更多的功能场景。
    功能场景
    说明
    单表扫描
    对于单表扫描,支持全表扫描、索引扫描、索引范围扫描等扫描类型的正序、逆序扫描。
    多表 join
    对于多表 Join,支持 Nested loop Join、HashJoin、Sort Merge Join 等多种 Join 算法。
    子查询
    对于子查询,支持非关联子查询。
    数据类型
    对于数据类型,支持带多种数据类型的查询,包括整型数据、字符型数据、浮点型数据、时间型数据等。
    运算公式
    支持算术表达式运算(+、-、*、%、/、|、&),条件表达式运算(<、<=、>、>=、<>、between/and、In 等),逻辑运算(or、and、not等),一般函数(字符函数、整型函数、时间函数等),聚合函数(count/sum/avg/min/max 等)。
    查看下压执行计划
    支持 Explain 查看下压执行计划,但只有在 Explain format=tree 中才能显示 COLUMNSTORE 标记。

    功能限制

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

    创建 CSI 的限制

    同一张表只能创建一个 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 资源。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持