2.15 限制

本节列出了 HeatWave 不支持的功能。它不是有关数据类型、函数、运算符和 SQL 模式的详尽列表。对于 HeatWave 支持的数据类型、函数、运算符和 SQL 模式,请参阅第 2.9 节“支持的数据类型”第 2.11 节“支持的函数和运算符”第 2.10 节“支持的 SQL 模式”。如果特定的数据类型、函数、运算符或 SQL 模式没有出现在那些表和列表中,则应将其视为不受支持。

变化传播

  • 由外键约束触发的级联更改。

  • 将更改传播到包含 列的表时,time_zoneSYSTEM( ) 之外 的设置。在这种情况下传播更改会导致不正确的数据存储在 列中,从而导致不正确的查询结果。 +00:00TIMESTAMPTIMESTAMP

字符集和排序规则

  • 字符集gb18030_chinese_ci和排序规则。

数据类型

  • 空间数据类型。请参阅 空间数据类型

  • 表达式运算中精度大于 18 的十进制值,表达式运算除外 ABS()

  • ENUM键入列作为UNION或非顶级 UNION ALL SELECT列表的一部分或作为 JOIN键,除非在受支持的表达式中使用。

  • ENUM类型支持仅限于:

    • 与字符串或数字常量以及其他数字、非时间表达式(数字列、常量和具有数字结果的函数)进行比较。

    • BETWEEN带有数字参数的 比较运算符(<、<=、<=>、=、>=、> 和)。

    • 带有字符串常量的比较运算符(=、<=> 和 <>)。

    • enum_col IS [NOT] {NULL|TRUE|FALSE}

    • IN()函数结合了数字参数(常量、函数或列)和字符串常量。

    • COUNT()SUM()和 列AVG()上的聚合函数ENUM。这些函数对数字索引值进行操作,而不是关联的字符串值。

    • CAST(enum_col AS {[N]CHAR [(X)]|SIGNED|UNSIGNED|FLOAT|DOUBLE|DECIMAL [(M,N)]}). 强制转换数字索引值,而不是关联的字符串值。

    • CAST(enum_col) AS {[N]CHAR}仅在 SELECT列表中且未嵌套在另一个表达式中时受支持。

  • 只有严格的 SQL 模式才支持时间类型。请参阅严格 SQL 模式

函数和运算符

索引和优化器提示

  • 索引和优化器提示。请参阅 索引提示优化器提示

  • .以外的半连接策略 FIRSTMATCH。MySQL 尝试执行该FIRSTMATCH策略并忽略所有其他明确指定为子查询优化器提示的半连接策略。但是,即使可以使用该策略提供等效计划 ,MySQL 仍可能 在顺序优化DUPSWEEDOUT期间选择半连接 策略。(如果在 HeatWave 上执行,使用半连接策略的计划将产生不正确的结果。) JOINFIRSTMATCHDUPSWEEDOUT

    有关子查询优化器提示的一般信息,请参阅子查询优化器提示

加入

  • 反连接,下面列出 的受支持 IN和反连接变体除外。EXISTS

  • 将该类型隐式转换(query cast injection) YEAR到其他类型。它只能与自身结合。

  • 将类型隐式转换(查询转换注入)为 、 和 VARCHAR以外的类型。 DATETIMETIMESTAMPDATE

  • 时间到数字隐式转换(查询转换注入)。因此,时间类型不能与数字类型连接。

  • EXISTS只有以下变体支持半连接和反连接:

    • SELECT ... WHERE ... EXISTS (...)

    • SELECT ... WHERE ... EXISTS (...) IS TRUE

    • SELECT ... WHERE ... EXISTS (...) IS NOT FALSE

    • SELECT ... WHERE ... NOT EXISTS (...) IS FALSE

    • SELECT ... WHERE ... NOT EXISTS (...) IS NOT TRUE

    根据 MySQL 执行的转换和优化,半连接的其他变体EXISTS 可能会或可能不会被卸载。

  • IN除了以下变体之外的半连接和反连接:

    • SELECT ... WHERE ... IN (...)

    • SELECT ... WHERE ... IN (...) IS TRUE

    • SELECT ... WHERE ... NOT IN (...) IS FALSE

    根据 MySQL 执行的转换和优化,半连接的其他变体IN 可能会或可能不会被卸载。

  • 由于 MySQL 优化和转换查询的方式,具有受支持的半连接或反连接条件的查询可能会被拒绝卸载。

  • 半连接和反连接查询使用在评估前 10000 个可能的计划之后找到的最佳计划,或者在调查自上一个有效计划以来的 10000 个可能的计划之后找到的最佳计划。在每个派生表、外部查询和每个子查询之后,计划评估计数将重置为零。计划评估限制是必需的DUPSWEEDOUT,因为 HeatWave 不支持的连接策略可能会在连接顺序优化期间被 MySQL 作为回退策略(有关信息,请参阅 FIRSTMATCH). DUPSWEEDOUT在 MySQL 生成大量使用半连接策略 的计划的情况下,计划评估限制可防止花费太多时间评估计划。

  • 没有为两个表定义相等条件的外连接查询。

  • 一些外连接查询IN ... EXISTS在子句中带有子查询(半连接) ON

SQL模式

变量

  • 一个group_concat_max_len 会话变量,其值超过最大 HeatWave 列长度(65532 字节)。

  • 作为sql_select_limit全局变量。它仅支持作为会话变量。

  • time_zone卸载查询时, timestamp变量设置不会传递给 HeatWave。

  • 将更改传播到包含 列的表时,time_zoneSYSTEM( ) 之外 的设置。在这种情况下传播更改会导致不正确的数据存储在 列中,从而导致不正确的查询结果。 +00:00TIMESTAMPTIMESTAMP

其他

  • 在下列情况下,子句中的 修饰符WITH ROLLUPGROUP BY

    • 在包含不同聚合的查询中。

    • 在包含重复GROUP BY键的查询中。

  • COUNT(NULL)在它用作非聚合运算符的输入参数的情况下。

  • UNION ALL在不同列类型之间、字典编码列之间或 列之间使用ORDER BYor 子句进行 查询。 LIMITENUM

    UNION在不同的列类型之间、字典编码的列之间或 列之间 使用或不使用ORDER BYor 子句的查询。 LIMITENUM

    UNION以及 UNION ALL 带有或不带有ORDER BY orLIMIT子句、不同列类型之间、字典编码列之间 、列之间或在or 子句 ENUM中指定的子查询。INEXISTS

  • 如果键列是 ,则比较谓词 , GROUP BY, JOIN等等 DOUBLE PRECISION

  • 关系数据的类型转换。例如, SELECT CONCAT(2, L_COMMENT) from LINEITEM;不支持。

  • 具有不可能WHERE 条件的查询(已知具有空结果集的查询)。例如,以下查询未卸载:

    SELECT AVG(c1) AS value FROM t1 WHERE c1 IS NULL;
  • YEAR使用表达式和其他函数 查询类型数据。例如,不会卸载以下查询:

    SELECT YEAR(d) + 1 FROM t1;
     
    SELECT YEAR(d) + c1 FROM t1; # where c1 is an integer column
  • 涉及具有不同排序规则的列的字符串操作。

  • 显式分区选择。请参阅 分区选择

  • 带有列前缀的主键。

  • 虚拟生成的列。

  • 作为触发器的一部分执行的查询。

  • 调用存储程序的查询。

  • 作为存储程序的一部分执行的查询。

  • 作为多查询事务一部分的查询。

  • 物化视图。仅支持非物化视图。请参阅使用视图

  • 常规查询的部分查询卸载 SELECT。如果支持查询的所有元素,则卸载整个查询;否则,查询默认在 MySQL 数据库系统上执行。(HeatWave 支持CREATE TABLE ... SELECTINSERT ... SELECT语句,其中只有 SELECT部分操作被卸载到 HeatWave。请参阅 第 2.3 节,“运行查询”。)

  • SET timezone = timezone, 其 timezone值指定为 UTC 的偏移量,格式为 [H]H:MM+ 或 - 并以 + 或 - 为前缀,仅由 UNIX_TIMESTAMP()FROM_UNIXTIME()函数支持。不支持命名时区。有关时区偏移量的信息,请参阅 MySQL 服务器时区支持

  • 将更改传播到包含列的表时,不支持( )time_zone以外 的设置。在这种情况下传播更改会导致不正确的数据存储在 列中,从而导致不正确的查询结果。 SYSTEM+00:00TIMESTAMPTIMESTAMP

  • 中间和最终查询结果中的行宽超过 4MB。超过此行宽度限制的查询不会卸载到 HeatWave 进行处理。

  • 对派生表的连续过滤操作。例如,不支持以下查询:

    SELECT * FROM (SELECT * FROM t1 WHERE x < 7) tt1,
                  (SELECT * FROM t1 WHERE x < y) tt2
    WHERE  tt1.x > 5 and tt1.x = tt2.x;

    The query uses a filter for table tt1 in the table scan of table t1 (x < 7) followed by a consecutive filter on table tt1 (tt1.x > 5) in the WHERE clause.

  • Recursive common table expressions.

  • ALTER TABLEMySQL Server运行在 SUPER_READ_ONLY模式下, 涉及加载、卸载或恢复数据等操作。SUPER_READ_ONLY当 MySQL 服务器磁盘空间在特定持续时间内低于设定数量时,MySQL 服务器将进入模式。有关控制此行为的阈值以及如何禁用 SUPER_READ_ONLY模式的信息,请参阅 MySQL 数据库服务指南中的Health Monitor文档。