本节主要介绍 OceanBase 数据库的 MySQL 模式与原生 MySQL 数据库的兼容性对比信息。

OceanBase 数据库的 MySQL 模式兼容 MySQL 5.6 的绝大部分功能和语法。由于产品架构不同,或者客户需求不大,有些功能并没有被支持。本节主要从以下几方面介绍 OceanBase 数据库的 MySQL 模式与原生 MySQL 数据库的不同:

  • 数据类型

  • SQL 语法

  • 系统视图

  • 字符集和排序方式

  • 函数与表达式

  • 分区支持

  • 备份恢复

  • 存储引擎

  • 优化器

  • 暂不支持的功能

数据类型

OceanBase 数据库支持的数据类型有:

  • 数值类型

    • 整数类型:BOOL/BOOLEAN、TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER、BIGINT

    • 定点类型:DECIMAL/NUMERIC

    • 浮点类型:FLOAT、DOUBLE

    • Bit-Value 类型:BIT

  • 日期时间类型

    • DATETIME、TIMESTAMP、DATE、TIME、YEAR
  • 字符类型

    • VARCHAR、VARBINARY、CHAR、BINARY、enum、set
  • 大对象类型

    • TINYTEXT、TINYBLOB、TEXT、BLOB、MEDIUMTEXT、MEDIUMBLOB、LONGTEXT、LONGBLOB

与 MySQL 数据库对比,OceanBase 数据库暂不支持空间数据类型和 JSON 数据类型,其他类别的数据类型支持情况是等于或大于 MySQL 数据库的。

SQL 语法

SELECT

  • 支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内连接、半连接以及外连接;支持分组、聚合;常见的概率、线性回归等数据挖掘函数等

  • 支持如下集合操作:

    union、union all、intersect、minus

  • 支持通过如下方式查看执行计划:

    1. EXPLAIN <SQL Statement>;
    2. EXPLAIN extended <SQL Statement>
  • 不支持SELECT … FOR SHARE …语法

INSERT

  • 支持单行和多行插入,同时还支持指定分区插入

  • 支持INSERT INTO … SELECT …语句

UPDATE

  • 支持单列和多列更新

  • 支持使用子查询

  • 支持集合更新

DELETE

  • 支持单表和多表删除

TRUNCATE

  • 支持完全清空指定表

系统视图

OceanBase 数据库实现了 information_schema 和 mysql 这两个内部数据库中的大部分视图,但是由于架构不同,OceanBase 数据库并不保证所有视图均能实现以及视图中所有的列含义与 MySQL 相同。

更多系统视图的说明信息请参考《参考指南(MySQL 模式)》文档中 系统视图 章节。

字符集和排序方式

OceanBase 数据库兼容 MySQL 数据库的部分字符集和排序方式,具体支持情况如下:

  • OceanBase 数据库支持的字符集有 binary、utf8mb4、gbk、utf16、gb18030。

  • OceanBase 数据库支持的排序方式有 utf8mb4_general_ci、utf8mb4_bin、binary、gbk_chinese_ci、gbk_bin、utf16_general_ci、utf16_bin、utf8mb4_unicode_ci、utf16_unicode_ci、gb18030_chinese_ci、gb18030_bin。

函数

与 MySQL 数据库对比,OceanBase 数据库的 MySQL 模式不支持的函数如下:

  • 数学函数:COT()、CRC32()、DEGREES()、LN()、LOG()、PI()、RADIANS()

  • 日期时间函数:ADDDATE()、ADDTIME()、CONVERT_TZ()、DAY()、DAYNAME()、GET_FORMAT()、LOCALTIME()、MAKEDATE()、MAKETIME()、MONTHNAME()、PERIOD_ADD()、QUARTER()、SUBDATE()、TIME_FORMAT()、TIMESTAMP()、UTC_DATE()

  • 字符串函数:BIT_LENGTH()、CHARACTER_LENGTH()、EXPORT_SET()、FROM_BASE64()、LCASE()、LOAD_FILE()、MATCH、OCTET_LENGTH()、RLIKE、SOUNDEX()、SOUNDS LIKE、TO_BASE64()、UCASE()、WEIGHT_STRING()

  • 强制转换函数:BINARY

  • XML函数:ExtractValue()、UpdateXML()

  • 加密和压缩函数:COMPRESS()、RANDOM_BYTES()、SHA1(), SHA()、SHA2()、STATEMENT_DIGEST()、STATEMENT_DIGEST_TEXT()、UNCOMPRESS()、UNCOMPRESSED_LENGTH()、VALIDATE_PASSWORD_STRENGTH()

  • 锁定函数:GET_LOCK()、IS_FREE_LOCK()、IS_USED_LOCK()、RELEASE_ALL_LOCKS()、RELEASE_LOCK()

  • 信息函数:BENCHMARK()、CURRENT_ROLE()、ICU_VERSION()、ROLES_GRAPHML()、SCHEMA()、SESSION_USER()、SYSTEM_USER()、

  • 聚集函数:BIT_AND()、BIT_OR()、BIT_XOR()、JSON_ARRAYAGG()、JSON_OBJECTAGG()、STD()、VAR_POP()、VAR_SAMP()

  • 窗口函数:OceanBase 数据库支持的是 MySQL 数据库的超集, MySQL 数据库的窗口函数都支持

  • 其他函数:ANY_VALUE()、BIN_TO_UUID()、INET_ATON()、INET_NTOA()、INET6_ATON()、INET6_NTOA()、IS_IPV4()、IS_IPV4_COMPAT()、IS_IPV4_MAPPED()、IS_IPV6()、IS_UUID()、MASTER_POS_WAIT()、NAME_CONST()、UUID_SHORT()、UUID_TO_BIN()

另外,OceanBase 数据库的 MySQL 模式不支持空间分析函数、JSON 函数和性能模式函数。

分区支持

OceanBase 数据库与 MySQL 数据库对分区的支持差异如下:

  • OceanBase 数据库支持一级分区,模板化和非模板化二级分区;MySQL 数据库不支持非模板化二级分区

  • OceanBase 数据库的二级分区支持 HASH、KEY、RANGE、RANGE COLUMNS、LIST、LIST COLUMNS 分区;MySQL 数据库的二级分区仅支持 HASH分区和 KEY 分区

更多分区的说明及使用请参见《管理员指南》文档中 分区表和分区索引管理 章节。

备份恢复

OceanBase 数据库兼容了部分 MySQL 数据库的备份恢复特性,主要支持情况如下:

  • 支持全量备份和增量备份

  • 仅支持热备份,不支持冷备份

  • 不支持数据库和表级的备份恢复

  • 不支持备份数据的有效性验证

存储引擎

与 MySQL 数据库基于数据块的 InnoDB 和 Myisam 引擎不同,OceanBase 数据库使用的是基于 LSM-Tree 架构的存储引擎。

优化器

OceanBase 数据库在优化器方面与 MySQL 数据库的区别,主要表现在以下几个方面:

  • 查看执行计划的命令

    • 输出的列信息仅包含 ID、OPERATOR、NAME、EST. ROWS 和 COST 以及算子的详细信息

    • 不支持使用SHOW WARNINGS显示额外的信息

  • 查看统计信息

    • 不支持执行ANALYZE TABLE语句查询数据字典表存储有关列值的直方图统计信息

    • 支持通过内部表__all_meta_table查看表统计信息和列统计信息

  • 查询改写优化

    • 支持外联接优化

    • 支持外联接简化

    • 支持块嵌套循环和批量 Key 访问联接

    • 支持条件过滤

    • 支持常量叠算优化

    • 支持 IS NULL 优化 (索引不存储 NULL 值)

    • 支持 ORDER BY 优化

    • 支持 GROUP BY 优化

    • 支持 DISTINCT 消除

    • 支持 LIMIT 下压

    • 支持 Window 函数优化

    • 支持避免全表扫描

    • 支持谓词下压

  • Optimizer Hint 机制

    • 支持联接顺序 Optimizer Hints

    • 支持表级别的 Optimizer Hints

    • 支持索引级别的 Optimizer Hints

    • 语法支持INDEX HINTFULL HINTORDERED HINTLEADING HINT等,不支持USE INDEXFORCE INDEX

  • 兼容 MySQL 数据库的并行执行能力包括并行查询、并行复制和并行写入等,且 OceanBase 数据库已经支持并行算子,包括并行聚集,并行联接,并行分组以及并行排序等。

  • OceanBase 数据库还支持计划缓存和预编译,MySQL 数据库并不支持。

更多优化器的详细信息请参见《SQL 调优指南》。

暂不支持的功能

  • 暂不支持空间数据类型和 JSON 数据类型

  • 不支持SELECT … FOR SHARE …语法

  • 不支持空间分析函数、JSON 函数和性能模式函数

  • 对于备份恢复功能,不支持数据库和表级的备份恢复;不支持备份数据的有效性验证

  • 对于优化器,查看执行计划的命令不支持使用SHOW WARNINGS显示额外的信息;不支持执行ANALYZE TABLE查询数据字典中表存储有关列值的直方图统计信息。