select语句元素的支持

一个完整的select语句的元素的集合如下所示。select语句语法的详细信息请参见MySQL官网:https://dev.mysql.com/doc/refman/8.0/en/select.html

SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[into_option]
[FOR {UPDATE | SHARE}
[OF tbl_name [, tbl_name] ...]
[NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]
[into_option]

into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}

select语句每个元素项的支持情况如表1所示。

表1 select语句的支持情况

select语句元素

说明

支持情况

[ALL | DISTINCT | DISTINCTROW]

  • DISTINCTDISTINCTROW表示返回重复列。
  • ALL或者不加ALLDISTINCTDISTINCTROW这三个关键字,表示返回所有记录。
  • 仅支持ALL情况。
  • 不支持带DISTINCT或DISTINCTROW的情况。

[HIGH_PRIORITY]

优化器使用,不影响执行结果集。

该关键字作用于MySQL优化器,不影响KOVAE执行或判断。

[STRAIGHT_JOIN]

优化器使用,不影响执行结果集。

该关键字作用于MySQL优化器,不影响KOVAE执行或判断。

[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

优化器使用,不影响执行结果集。

该关键字作用于MySQL优化器,不影响KOVAE执行或判断。

[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

优化器使用,不影响执行结果集。

该关键字作用于MySQL优化器,不影响KOVAE执行或判断。

select_expr [, select_expr] …

表示select列表的表达式。KOVAE会对其判断每个item的类型,及其参数的类型,并对其每个参数进行递归判断。

部分支持,详细信息请参见item类型的支持

[into_option]

表示将结果集写入到服务端文件中。

不支持,不是常用场景。

[FROM table_references

[PARTITION partition_list]]

表示SQL相关的表和JOIN的关系。

  • 支持部分表访问类型,详细信息请参见表3
  • 仅支持非临时表。
  • 仅支持InnoDB表。
  • 不支持全文索引。
  • 不支持分区表。

[WHERE where_condition]

表示where条件的表达式。KOVAE会对其判断每个item的类型,及其参数的类型,并对其每个参数进行递归判断。

部分支持,详细信息请参见item类型的支持

[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]

表示group by子句。KOVAE会对其判断每个item的类型,及其参数的类型,并对其每个参数进行递归判断。

部分支持,详细信息请参见item类型的支持

[HAVING where_condition]

表示having条件的表达式。KOVAE会对其判断每个item的类型,及其参数的类型,并对其每个参数进行递归判断。

部分支持,详细信息请参见item类型的支持

[WINDOW window_name AS (window_spec) [, window_name AS (window_spec)] ...]

表示窗口函数。

不支持。

[ORDER BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]]

表示order by子句。KOVAE会对其判断每个item的类型,及其参数的类型,并对其每个参数进行递归判断。

部分支持,详细信息请参见item类型的支持

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

表示limit子句。

支持。

[into_option]

表示将结果集写入到服务端文件中。

不支持,不是常用场景。

[FOR {UPDATE | SHARE}

[OF tbl_name [, tbl_name] ...]

[NOWAIT | SKIP LOCKED]

| LOCK IN SHARE MODE]

表示对查询的数据进行锁定读取。

不支持。

[into_option]

表示将结果集写入到服务端文件中。

不支持,不是常用场景。

表2 其他项的支持情况

项目

支持情况

语句类型

仅支持SQLCOM_SELECT类型的语句(select查询),不支持update等其他语句类型。

Union

支持简单的非Union的select语句。

主表数和常量表数

不支持查询中主表包含常量表的情况。

Agg行数预估

不支持未充分评估Agg的执行计划。

查询最大fields数

不支持fields的数量大于MAX_FIELDS个的查询语句。

优化器提前确定结果集必然为空的查询

如果优化器已经确定查询结果集必然为空集,则不支持该查询。

字符集

仅支持UTF8MB4字符集。

仅支持表3中前5种表访问类型,其他访问方式均不支持。

表3 表访问类型的支持情况

表访问类型

说明

支持情况

JT_EQ_REF

唯一索引上的等值匹配

支持

JT_REF

非唯一索引上的等值匹配

支持

JT_ALL

全表扫

支持

JT_RANGE

范围扫

支持

JT_INDEX_SCAN

扫索引的叶子节点

支持

JT_SYSTEM

-

不支持

JT_CONST

-

不支持

JT_FT

-

不支持

JT_REF_OR_NULL

-

不支持

JT_INDEX_MERGE

-

不支持