暂无图片
暂无图片
14
暂无图片
暂无图片
暂无图片

OceanBase 数据库的 MySQL 模式与原生 MySQL 数据库的兼容性对比信息

OceanBase,数据库 2022-08-25
1066

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

  • 数据类型

  • SQL 语法

  • 系统视图

  • 字符集和字符序

  • 函数与表达式

  • 分区支持

  • 备份恢复

  • 存储引擎

  • 优化器

  • 暂不支持的功能

数据类型

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

  • 数值类型

    • 整数类型:BOOL/BOOLEAN/TINYINTSMALLINTMEDIUMINTINT/INTEGER 和 BIGINT

    • 定点类型:DECIMAL 和 NUMERIC

    • 浮点类型:FLOAT 和 DOUBLE

    • Bit-Value 类型:BIT

  • 日期时间类型:DATETIMETIMESTAMPDATETIME 和 YEAR

  • 字符类型:CHARVARCHARBINARY 和 VARBINARY

  • 大对象类型:TINYBLOBBLOBMEDIUMBLOB 和 LONGBLOB

  • 文本类型:TINYTEXTTEXTMEDIUMTEXT 和 LONGTEXT

  • 枚举类型:ENUM

  • 集合类型:SET

  • JSON 数据类型。

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

SQL 语法

SELECT

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

  • 支持对多个 SELECT 查询的结果进行 UNIONUNION ALLMINUSEXCEPT 或 INTERSECT 等集合操作。

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

    EXPLAIN [explain_type] dml_statement;
    explain_type:
      BASIC 
    | OUTLINE
    | EXTENDED
    | EXTENDED_NOADDR
    | PARTITIONS 
    | FORMAT = {TRADITIONAL| JSON}
    
    dml_statement:
      SELECT statement 
    | DELETE statement
    | INSERT statement
    | REPLACE statement
    | UPDATE statement
    
  • 不支持 SELECT ... FOR SHARE ... 语法。

INSERT

  • 支持单行和多行插入,以及指定分区插入。

  • 支持 INSERT INTO ... SELECT ... 语句。

  • 不支持直接对子查询进行插入操作。

UPDATE

  • 支持单列和多列更新。

  • 支持使用子查询。

  • 支持集合更新。

  • 不支持直接对子查询进行更新值操作。

DELETE

  • 支持单表和多表删除。

  • 不支持直接对子查询进行删除操作。

TRUNCATE

  • 支持完全清空指定表。

  • 不支持在进行事务处理和表锁定的过程中操作。

系统视图

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

更多系统视图的说明信息请参考 系统视图 章节。

字符集和字符序

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

  • 字符集:binary、utf8mb4、gbk、utf16 和 gb18030。

  • 字符序: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 模式不支持如下函数:

  • 日期时间函数:ADDTIME()DAY() 和 DAYNAME()

  • 字符串函数:CHARACTER_LENGTH()FROM_BASE64()LOAD_FILE()MATCH()OCTET_LENGTH()SOUNDEX() 和 TO_BASE64()

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

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

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

  • 其他函数:MASTER_POS_WAIT() 和 NAME_CONST() 。

另外,OceanBase 数据库的 MySQL 模式不支持空间分析函数和性能模式函数。OceanBase 数据库所支持的分析(窗口)函数是 MySQL 数据库的超集,即 MySQL 数据库的分析(窗口)函数都支持。

分区支持

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

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

  • OceanBase 数据库的二级分区支持 Hash、Key、Range、Range Columns、List 和 List Columns 分区;MySQL 数据库的二级分区仅支持 Hash 分区和 Key 分区。

  • OceanBase 数据库支持模版化和非模版化二级分区表组;MySQL 数据库不支持非模板化二级分区表组。

更多分区的说明及使用请参见 分区概述 章节。

备份恢复

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

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

  • 支持备份数据的备份。

  • 支持备份数据的校验。

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

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

存储引擎

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

优化器

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

  • 查看执行计划的命令

    • 输出的列信息仅包含 IDOPERATORNAMEEST. 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 Hint、FULL Hint、ORDERED Hint 和 LEADING Hint 等,不支持 USE INDEX 和 FORCE INDEX

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

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

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

暂不支持的功能

  • 主键列不支持 INT 转为 BIGINT 数据类型。

  • 暂不支持空间数据类型。

  • 不支持 SELECT ... FOR SHARE ... 语法。

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

  • 对于备份恢复功能,不支持数据库和表级的备份恢复。

  • 对于优化器,查看执行计划的命令不支持使用 SHOW WARNINGS 显示额外的信息。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论