OceanBase 全局索引与局部索引探索
OceanBase 全局索引与局部索引探索导致的本区域查找和跨区域查找。
作者:网名大数据模型,对制造业、银行业、通讯业了解多一点,关心专注国产数据库技术布道以及数据资产建设的应用实践。
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文约 1200 字,预计阅读需要 4 分钟。
OceanBase 的索引
索引和分区是数据库的关键核心基本功能,OceanBase 是一个单体分布式的架构,具有高性能、高扩展、高可用的特点,索引和分区立了大功。
OceanBase 的索引有局部索引和全局索引。局部索引和全局索引的索引区别在哪里?下面通过实战例子演示如何给 OceanBase 做优化。 阅读时注意以下几个优化关键参考指标。
- is_index_back:表示查询 SQL 是否已经回表,数值是 off 是最好。
- is_global_index:表示是否已经激活全局索引。
- physical_range_rows:表示读取的物理范围行,数值越小越好。
- logical_range_rows 表示读取的逻辑范围行,数值越小越好。
- Plan type :有 3 个选项,最优是 LOCAL 对应本地调用,REMOTE 对应远程调用,最坏情况是 DISTRIBUTED。
准备环境
建一个 user1
表并填充一些数据。
CREATE TABLE `user1` ( `id` int(11) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, `phone` int(12) DEFAULT NULL, `address` varchar(100) DEFAULT NULL ) partition by hash(id+1) partitions 3; obclient [tpch]> select count(*) from user1 -> ; +----------+ | count(*) | +----------+ | 79993 | +----------+ 1 row in set (0.025 sec) delimiter // create procedure bulk_user() begin declare i int; declare phone int; set i=100000; set phone=1592014273; while i<1000001 do insert INTO user (id,name ,phone,address) values (i,'yang',phone+i,'address'); set i=i+1; end while; end // delimiter ;
索引使用场景
场景一:没有加索引
obclient [tpch]> explain extended select phone ,name from user1 where phone = 1592014286;
索引测试,没有加索引前,对全盘进行扫描找到了目标对象,操作过程中产生没有产生回表。
场景二:加了局部索引
obclient [tpch]> create index idx_user1_phone on user1 (phone) local; Query OK, 0 rows affected (3.152 sec) explain extended select phone,name from user1 where phone = 1592014286;
索引测试,加了局部索引后,对硬盘扫描只查找了 791 行,操作过程中居然产生了回表操作。
场景三:分区查找
obclient [tpch]> explain extended select name, phone from user1 where id= 5000;
分区测试,通过分区为关键字查找,按划分的分区【26664】查找,由于没有索引设置,遍历所有的26664,没有产生回表。
场景四:分区加索引进行查找
obclient [tpch]> create index idx_user1_id on user1 (id) local; Query OK, 0 rows affected (3.379 sec) obclient [tpch]> explain extended select name, phone from user1 where id= 5000;
分区加索引测试,id
即是索引也是分区。设置索引后按划分的分区【26664】查找,physical_range_rows
和 logical_range_rows
成绩喜人,但是发生回表的操作。
为什么产生回表?主要语句有 select name, phone
, id
是虽然做了索引,但name
和 phone
是投影,从而做了回表。
场景五:创建唯一索引消灭回表
obclient [tpch]> create unique index idx_user_phone_name on user1 (phone,name) local ; ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function 提示 1503 错误,创建唯一索引必须指定分区的指定 obclient [tpch]> create unique index idx_user_id_phone_name on user1 (phone,name,id) local ; Query OK, 0 rows affected (3.352 sec) explain extended select phone ,name from user1 where phone = 1592014286;
为什么唯一索引必须内含内含分区 ID,必须是唯一性,必须包括主键列,基于局部索引加上唯一索引,不产生回表。
场景六:创建全局索引消灭回表
create unique index global_idx_phone on user1(phone,name) global ; explain extended select phone ,name from user1 where phone = 1592014286;
全局索引按照 phone
,name
也可以消来回表。
总结
OceanBase 是单体分布式架构的数据库,调优第一原则遵从先单体再分布的特色,简而言之最好内循环把单机性能用光,再外循环使用分布式,力争 LOCAL 优先、REMOTE 为次、DISTRUBTE 是最坏的,综合执行状况要结合扫描数据范围和回表状况来看。
局部索引应用于争取 LOCAL 的场景,避免 DISTRUBTE。场景二、场影三、场影四 使用 LOCAL,但是场景五使用 DISTRUBTE。深思的是必须结合分区键才能完成唯一索引创建。这里内部的逻辑,局部索引要完成跨域,必须要与分区键绑定。
全局索引也可以实现 LOCAL 的场景,见场景六。笔者后续会做 OceanBase 的分布式环境。假设是分布式环境兼数据多的业务场景下,笔者揣测 DISTRUBTE 的机会性较大。
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
生成式 AI 如何释放开发者的生产力?
生成式 AI 可以将程序员的开发速率提高两倍。技术管理者有望通过 AIGC 应用,大幅缩短四类关键开发任务的完成时间,进而提升组织生产力。 ——麦肯锡《通过生成式 AI 释放开发者生产力》 01 生成式 AI 将如何影响研发效能? 麦肯锡最近的一项实证研究发现,生成式 AI 工具可以显著提升程序员的开发速率,进而显著提升组织生产力。 该研究对来自美国和亚洲各地的 40 余名开发者展开了观察和实验。参与者们需要执行三种常见的开发任务——代码生成、代码重构和文档编写,而开发者特征、任务的完成时间和复杂性,以及代码质量等数据被科学地记录下来。 研究结果表明,在生成式 AI 的辅助下,可维护性代码文档可以在一半的时间内完成,新代码生成效率提升近一倍,而代码重构类任务的完成时间也节省近三分之一。在新工具和流程的推动下,结合正确的技能提升和企业赋能,这些速度的提升可以转化为生产力的提高,并超越过去工程生产力的进步。 不过,任务完成时间的减少也可能会因开发任务的复杂性和开发者经验而有所差异。对于高复杂度任务,由于开发者缺乏必要的背景知识,其时间节省不足 10%。此外,在某些情况下,使用了 AIGC ...
- 下一篇
扩散模型加速采样算法 OLSS,大幅提升模型推理速度
论文: Zhongjie Duan, Chengyu Wang, Cen Chen, Jun Huang, Weining Qian. Optimal Linear Subspace Search: Learning to Construct Fast and High-Quality Schedulers for Diffusion Models. CIKM 2023 背景 近年来,在图像生成领域,对于扩散模型的成功我们有目共睹。与基于 GAN 的生成模型不同,扩散模型需要多次调用模型进行前向推理,经过多次迭代,才能得到清晰完整的图像。扩散模型在大幅度提升生成效果的同时,也因其迭代式的生成过程面临严重的计算效率问题。我们希望改进扩散模型的生成过程,减少迭代步数,提升生成速度。 加速算法的统一分析 这其实揭示了调度机设计的本质——在由模型输出值和初始高斯噪声张成的向量空间中求解下一步的。不同的调度机仅在迭代公式的系数上存在不同,我们决定设计一个新的调度机,将迭代公式中的系数设计成可训练的,使其对应的近似计算过程更加精确。 算法架构 此外,为了进一步降低这个算法的误差,我们还对 {t...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果