首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OceanBase4.1如何助力MySQL8.0的功能特性?用户的行为呈现出答案

作为业内最受欢迎的关系数据库之一,MySQL承载着重要工作的运行和记录,在各种网站、应用程序等方面,已经成为不少用户的首选。不过,在更新版本的过程中,MySQL存在工作量迁移时间过长、复制的版本与所需要迁移的版本是否兼容、现有应用程序在查询时需要经过相关的更改等问题,也成为用户使用MySQL的一大障碍。

针对上述问题,OceanBase早就给出了对策。早在OceanBase1.0时代,就已经在MySQL兼容能力研发上投入了大量工作,一举实现了SQL语法、数据类型、系统函数等全面的MySQL兼容能力。随后的5.6到8.0的MySQL兼容版本中,更是新增了多个功能特性,全方位助力用户在数据库领域持续深耕,其中三个亮点尤其受到了用户的广泛关注。

兼顾两大要点,实现可维护性与利用率的双双提升

在OceanBase4.1支持下的MySQL8.0,同时兼顾到了公共表表达式与资源管理两大要点,双双提升SQL的可维护性和资源利用率。

从公共表表达式(简称CTE)来看,用户借助CTE可以将复杂的查询拆分为多个逻辑部分,使复杂查询的结构更清晰、SQL代码的逻辑更直观;还可以通过递归CTE实现更复杂的功能。

OceanBase从2.0版本开始支持CTE功能,即使用户在SQL编写中未使用CTE,OceanBase也会在改写阶段进行识别并抽取,通过减少子查询执行次数以优化性能。多个案例均证明,OceanBase在用户未使用CTE情况下给出的执行计划,与用户自己使用CTE编写SQL的执行计划一致。更厉害的在于,OceanBase将子查询结果存起来,并在后续多次读取,减少子查询执行次数。

从资源管理来看,OceanBase3.x版本开始,在Oracle模式中支持了Oracle的资源管理(DBMS_RESOURCE_MANAGER包),与MySQL的resourcemanagement主要针对CPU资源分配不同,OceanBase提供了丰富、灵活的资源管理策略,可以设置多种不同的资源计划,根据消耗情况动态调整资源分配,具备更完备的功能和更多的定制可能性。

MySQL8.0开始支持资源组功能,此功能可以指定资源组所使用的CPU资源以及任务调度优先级,从而对数据库查询的执行进行管理和控制。同时,可以通过固有的语法为线程指定资源组,或通过语句指定资源组,从而提高资源的整体利用率。

缔造双重优势,助力数据分析与连接性能齐齐提升

在数据分析能力和连接性能方面,OceanBase4.1支持下的MySQL8.0分别通过窗口函数和HashJoin予以实现。

其中,窗口函数可以对某个窗口内的数据行执行聚合操作,能更简单直观地进行时间序列分析、累积统计、排名等操作,帮助用户更深入地发现数据价值。其主要通过窗口控制参与计算的行,将结果放回多行当中。

如在要按项目对运动员得分进行排名的场景中,就可以借助OceanBase支持的MySQL窗口函数设定运动类别、运动员名字、分数,从而进行数据趋势变化、不同指标排序数据、复杂统计指标计算等数据分析,不仅提高工作效率,还能降低查询计算的成本。值得一提的是,即使用户在SQL编写中没有使用窗口函数,在部分场景中,OceanBase也会将部分SQL自动改写为包含窗口函数的语句,以提高性能。

而HashJoin是数据库中广泛实现的连接(JOIN)算法,用于处理两个或多个表之间的连接操作,在数据量较大时通常有性能优势。然而,在MySQL8.0版本之前,支持的连接算法只有NestedLoopJoin,尽管这种连接算法在Web应用和OLTP场景中的性能已相对较好,但当内表数据量较大且没有适合索引时,其弊端就显现出来了。

对此,OceanBase既通过面向的应用场景很多都涉及海量数据处理的角度支持HashJoin算法,又通过支持NestedLoopJoin以及MergeJoin,从而凸显其利用索引或利用序的场景来凸显性能优势,最终为用户自动选择最适合的算法。

夯实索引管理,带来更高的索引管理效率

MySQL8.0引入了设置索引可见性的功能,这一功能允许用户在不删除索引的前提下,将索引设置为不可见。在不可见状态下,查询优化器会忽略该索引,不将其用于查询计划,但其索引数据仍将正常维护。综合来看,索引可见性设置可以帮助用户更灵活地管理索引策略、优化查询性能并降低资源浪费,从而提升数据库管理效率。

在这一方面,OceanBase从1.x版本就已经实现了全面的支持。发展至今,MySQL8.0还新增了对逆序索引的支持,逆序索引是指索引列可指定降序,这样一些按降序的排序可利用此索引。此外,OceanBase优化器会利用正序索引(逆序扫描),并支持前缀排以及通过并行(PX)加速排序,可以用逆序扫描索引的方式利用索引,实现对单列的逆序排序,以及在排序时只对不能利用索引的列进行排序,完成混合了正逆序的多列排序场景。

除了上述特性之外,OceanBase还通过公共表表达式增强SQL的可维护性、通过资源管理提高资源的利用率。另外,OceanBase还助力MySQL8.0带来了如JSON类型增强、支持INTERSECT,EXPECT等功能特性,也解决了如AtomicDDL、自增值持久化等长期存在的不足。

随着,OceanBase4.1及其后续版本的持续优化发展,对MySQL8.0的兼容性也将给我们带来更好的使用感受,值得大家上手体验。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230524A049H300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券