MySQL 兼容性
本节主要介绍 seekdb 与原生 MySQL 数据库的兼容性对比信息。
seekdb 兼容 MySQL 5.7/8.0 的绝大部分功能和语法。由于产品架构不同,或者客户需求不大,有些功能并没有被支持。本节主要从以下几方面介绍 seekdb 与原生 MySQL 数据库的不同:
-
数据类型
-
SQL 语法
-
过程性语言
-
系统视图
-
字符集
-
字符序
-
函数与表达式
-
分区支持
-
存储引擎
-
优化器
数据类型
seekdb 支持的数据类型有:
-
数值类型
-
整数类型:
BOOL/BOOLEAN/TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER和BIGINT。 -
定点类型:
DECIMAL和NUMERIC。 -
浮点类型:
FLOAT和DOUBLE。 -
Bit-Value 类型:
BIT。
-
-
日期时间类型:
DATETIME、TIMESTAMP、DATE、TIME和YEAR。 -
字符类型:
CHAR、VARCHAR、BINARY和VARBINARY。 -
大对象类型:
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。 -
文本类型:
TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT和STRING。 -
枚举类型:
ENUM。 -
集合类型:
SET。 -
JSON 数据类型
-
空间数据类型
-
高效压缩位图数据类型
-
数组数据类型
-
向量数据类型
SQL 语法
tab 支持
SELECT
-
支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内联接、半联接以及外联接;支持分组、聚合;支持常见的概率、线性回归等数据挖掘函数等。
-
支持对多个
SELECT查询的结果进行UNION、UNION ALL、MINUS、EXCEPT或INTERSECT等集合操作。 -
支持使用
EXPLAIN语法查看执行计划。
INSERT
-
支持单行和多行插入数据,同时支持指定分区插入数据。
-
支持
INSERT INTO ... SELECT ...语句。
UPDATE
-
支持单列和多列更新数据。
-
支持使用子查询更新数据。
-
支持集合更新数据。
DELETE
- 支持单表和多表删除。
TRUNCATE
- 支持完全清空指定表。
tab 不支持
SELECT
- 不支持
SELECT ... FOR SHARE ...语法。
TRUNCATE
- 不支持在进行事务处理和表锁定的过程中操作。
过程性语言
seekdb 兼容了大部分 MySQL 数据库的 PL 功能,主要支持的 PL 功能如下:
- 数据类型
- 存储过程
- 自定义函数
- 触发器
- 异常处理
此外,seekdb 特有的 MySQL PL 系统包,包括 DBMS_RESOURCE_MANAGER、DBMS_STATS、DBMS_UDR、DBMS_XPLAN 和 DBMS_WORKLOAD_REPOSITORY 等。
更多 PL 功能的详细信息,请参见 PL 参考。
系统视图
seekdb 实现了 information_schema 和 mysql 这两个内部数据库中的大部分视图,但是由于架构不同,seekdb 并不保证所有视图均能实现以及视图中所有的列含义与 MySQL 相同。
更多系统视图的说明信息请参考《参考指南》文档中 系统视图 章节。
字符集
seekdb 支持的字符集如下:
-
binary
-
utf8mb4/utf8mb3
信息utf8mb3是utf8mb4的别名。 -
gbk
-
utf16
-
utf16le
-
gb18030
-
latin1
-
gb18030_2022
-
ascii
-
tis620
-
sjis
-
big5
-
dec8
-
gb2312
-
ujis
-
euckr
-
eucjpms
-
cp932
-
cp850
-
hp8
-
macroman
-
swe7
字符序
seekdb 支持的字符序如下表所示。
| 字符序 | 所属字符集 | 说明 |
|---|---|---|
| utf8mb4_general_ci | utf8mb4 | 使用通用排序规则。 |
| utf8mb4_bin | utf8mb4 | 使用二进制排序规则。 |
| utf8mb4_unicode_ci | utf8mb4 | 使用基于 Unicode Collation Algorithm (UCA) 的排序规则。 |
| utf8mb4_unicode_520_ci | utf8mb4 | 使用 Unicode 5.2.0 版本的排序规则。它遵循 Unicode 码点排序,并忽略字符的大小写差异。 |
| utf8mb4_croatian_ci | utf8mb4 | 使用克罗地亚文(Croatian)的排序规则。utf8mb4_croatian_ci 兼容 utf8_croatian_ci。 |
| utf8mb4_czech_ci | utf8mb4 | 使用捷克文(Czech) 的排序规则。 |
| utf8mb4_0900_ai_ci | utf8mb4 | 使用 Unicode 9.0.0 版本的字符排序规则和顺序,同时忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。 |
| binary | binary | 使用二进制排序规则。 |
| gbk_chinese_ci | gbk | 使用中文语言排序规则。 |
| gbk_bin | gbk | 使用二进制排序规则。 |
| utf16_general_ci | utf16 | 使用通用排序规则。 |
| utf16_bin | utf16 | 使用二进制排序规则。 |
| utf16_unicode_ci | utf16 | 使用基于 Unicode Collation Algorithm (UCA) 的排序规则。 |
| utf8mb4_german2_ci | utf16le | 使用德语排序规则。 |
| utf8mb4_croatian_ci | utf16le | 使用克罗地亚语排序规则。 |
| gb18030_chinese_ci | gb18030 | 使用中文语言排序规则。 |
| gb18030_bin | gb18030 | 使用二进制排序规则。 |
| latin1_swedish_ci | latin1 | 使用瑞典语/芬兰语排序规则。 |
| latin1_german1_ci | latin1 | 用于德国(German)语言环境下的 latin1 字符集的排序规则。 |
| latin1_danish_ci | latin1 | 用于丹麦(Danish)语言环境下的 latin1 字符集的排序规则。 |
| latin1_german2_ci | latin1 | 用于德语环境,适用于需要按照字典顺序进行字符比较的应用场景。 |
| latin1_general_ci | latin1 | 用于需要不区分大小写且支持重音符号的场景,如某些欧洲语言的数据库设计。 |
| latin1_general_cs | latin1 | 用于区分大小写的通用排序规则,支持多种语言(如西欧语言)。 |
| latin1_spanish_ci | latin1 | 用于西班牙(Spanish)语言 环境的排序规则。 |
| latin1_bin | latin1 | latin1 使用二进制排序规则。 |
| gb18030_2022_bin | gb18030_2022 | 使用二进制排序规则。 |
| gb18030_2022_chinese_ci | gb18030_2022 | 使用拼音排序规则。不区分大小写。该字符集的默认字符序。 |
| gb18030_2022_chinese_cs | gb18030_2022 | 使用拼音排序规则。区分大小写。 |
| gb18030_2022_radical_ci | gb18030_2022 | 使用部首笔画排序规则。不区分大小写。 |
| gb18030_2022_radical_cs | gb18030_2022 | 使用部首笔画排序规则。区分大小写。 |
| gb18030_2022_stroke_ci | gb18030_2022 | 使用笔画排序规则。不区分大小写。 |
| gb18030_2022_stroke_cs | gb18030_2022 | 使用笔画排序规则。区分大小写。 |
| ascii_bin | ascii | 使用二进制排序规则。 |
| ascii_general_ci | ascii | 使用基于字母的不区分大小写的排序规则。它忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。 |
| tis620_bin | tis620 | 使用二进制排序规则。 |
| tis620_thai_ci | tis620 | 使用泰语排序规则,不区分大小写。 |
| sjis_japanese_ci | sjis | 使用日语排序规则。 |
| dec8_swedish_ci | dec8 | 使用瑞典语排序规则。 |
| gb2312_chinese_ci | gb2312 | 使用 GB2312 字符集,按照中文排序规则进行不区分大小写的排序。 |
| gb2312_bin | gb2312 | 使用 GB2312 字符集,按照二进制顺序进行区分大小写的排序。 |
| ujis_japanese_ci | ujis | 使用 UJIS 字符集,按照日语排序规则进行不区分大小写的排序。 |
| ujis_bin | ujis | 使用 UJIS 字符集,按照二进制顺序进行区分大小写的排序。 |
| euckr_korean_ci | euckr | 使用 EUCKR 字符集,按照韩语排序规则进行不区分大小写的排序。 |
| euckr_bin | euckr | 使用 EUCKR 字符集,按照二进制顺序进行区分大小写的排序。 |
| eucjpms_japanese_ci | eucjpms | 使用 EUCJPMS 字符集,按照日语排序规则进行不区分大小写的排序。 |
| eucjpms_bin | eucjpms | 使用 EUCJPMS 字符集,按照二进制顺序进行区分大小写的排序。 |
| cp932_japanese_ci | cp932 | 使用 CP932 字符集,按照日语排序规则进行不区分大小写的排序。 |
| cp932_bin | cp932 | 使用 CP932 字符集,按照二进制顺序进行区分大小写的排序。 |
| cp850_general_ci | cp850 | 使用 CP850 字符集,按照通用排序规则进行不区分大小写的排序。 |
| cp850_bin | cp850 | 使用 CP850 字符集,按照二进制顺序进行区分大小写的排序。 |
| hp8_english_ci | hp8 | 使用 HP8 字符集,按照英语排序规则进行不区分大小写的排序。 |
| hp8_bin | hp8 | 使用 HP8 字符集,按照二进制顺序进行区分大小写的排序。 |
| macroman_general_ci | macroman | 使用 MacRoman 字符集,按照通用排序规则进行不区分大小写的排序。 |
| macroman_bin | macroman | 使用 MacRoman 字符集,按照二进制顺序进行区分大小写的排序。 |
| swe7_swedish_ci | swe7 | 使用 SWE7 字符集,按照瑞典语排序规则进行不区分大小写的排序。 |
| swe7_bin | swe7 | 使用 SWE7 字符集,按照二进制顺序进行区分大小写的排序。 |
函数
tab 支持
seekdb 所支持的分析(窗口)函数是 MySQL 数据库的超集,即 MySQL 数据库的分析(窗口)函数 seekdb 都支持。
tab 不支持
与 MySQL 数据库对比,seekdb 不支持如下函数:
-
字符串函数:
LOAD_FILE()和MATCH()。 -
XML 函数:
ExtractValue()和UpdateXML()。 -
其他函数:
MASTER_POS_WAIT()。
分区支持
seekdb 与 MySQL 数据库对分区的支持差异如下:
-
seekdb 支持一级分区,模板化和非模板化二级分区;MySQL 数据库不支持非模板化二级分区。
-
seekdb 的二级分区支持 Hash、Key、Range、Range Columns、List 和 List Columns 分区;MySQL 数据库的二级分区仅支持 Hash 分区和 Key 分区。
-
seekdb 的二级分区表支持添加和删除二级分区;MySQL 数据库不支持添加和删除二级分区。
提示不支持二级分区类型是 Hash 或 Key 类型的场景新增和删除二级分区。
更多分区的说明及使用,请参见 分区概述。
存储引擎
与 MySQL 数据库基于数据块的 InnoDB 和 Myisam 引擎不同,seekdb 使用的是基于 LSM-Tree 架构的存储引擎。
优化器
seekdb 兼容了部分 MySQL 数据库的优化器功能。有关优化器的详细信息,请参见 SQL 调优指南。
tab 支持
-
查看执行计划的命令
- 输出的列信息仅包含
ID、OPERATOR、NAME、EST. ROWS和COST以及算子的详细信息。
- 输出的列信息仅包含
-
查看统计信息
-
支持执行
ANALYZE TABLE语句手动查询数据字典表存储有关列值的直方图统计信息。 -
支持通过视图自动查看表统计信息和列统计信息。
-
-
查询改写优化
-
支持外联接优化。
-
支持外联接简化。
-
支持块嵌套循环和批量 Key 访问联接。
-
支持条件过滤。
-
支持常量叠算优化。
-
支持
IS NULL优化 (索引不存储NULL值)。 -
支持
ORDER BY优化。 -
支持
GROUP BY优化。 -
支持
DISTINCT消除。 -
支持
LIMIT下压。 -
支持 Window 函数优化。
-
支持避免全表扫描。
-
支持谓词下压。
-
-
Optimizer Hint 机制
-
支持联接顺序 Optimizer Hints。
-
支持表级别的 Optimizer Hints。
-
支持索引级别的 Optimizer Hints。
-
语法支持
INDEXHint、FULLHint、ORDEREDHint 和LEADINGHint 等。
-
-
兼容 MySQL 数据库的并行执行能力包括并行查询、并行复制和并行写入等,且 seekdb 已经支持并行算子,包括并行聚集、并行联接、并行分组以及并行排序等。
-
seekdb 还支持计划缓存和预编译,MySQL 数据库并不支持。
tab 不支持
-
查看执行计划的命令
- 不支持使用
SHOW WARNINGS显示额外的信息。
- 不支持使用