OceanBase 全局索引与局部索引探索

这篇具有很好参考价值的文章主要介绍了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;

OceanBase 全局索引与局部索引探索,oceanbase

OceanBase 全局索引与局部索引探索,oceanbase

索引测试,没有加索引前,对全盘进行扫描找到了目标对象,操作过程中产生没有产生回表。

场景二:加了局部索引

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;

OceanBase 全局索引与局部索引探索,oceanbase

OceanBase 全局索引与局部索引探索,oceanbase

索引测试,加了局部索引后,对硬盘扫描只查找了 791 行,操作过程中居然产生了回表操作。

场景三:分区查找

obclient [tpch]> explain extended select name, phone  from user1  where  id= 5000;

OceanBase 全局索引与局部索引探索,oceanbase

OceanBase 全局索引与局部索引探索,oceanbase

分区测试,通过分区为关键字查找,按划分的分区【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;

OceanBase 全局索引与局部索引探索,oceanbaseOceanBase 全局索引与局部索引探索,oceanbase

分区加索引测试,id 即是索引也是分区。设置索引后按划分的分区【26664】查找,physical_range_rowslogical_range_rows 成绩喜人,但是发生回表的操作。

为什么产生回表?主要语句有 select name, phoneid 是虽然做了索引,但namephone 是投影,从而做了回表。

场景五:创建唯一索引消灭回表

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;

OceanBase 全局索引与局部索引探索,oceanbase

OceanBase 全局索引与局部索引探索,oceanbase

为什么唯一索引必须内含内含分区 ID,必须是唯一性,必须包括主键列,基于局部索引加上唯一索引,不产生回表。

场景六:创建全局索引消灭回表

create unique index   global_idx_phone  on  user1(phone,name) global ;

explain extended  select phone ,name  from  user1 where   phone = 1592014286;

OceanBase 全局索引与局部索引探索,oceanbaseOceanBase 全局索引与局部索引探索,oceanbase

全局索引按照 phonename 也可以消来回表。

总结

OceanBase 是单体分布式架构的数据库,调优第一原则遵从先单体再分布的特色,简而言之最好内循环把单机性能用光,再外循环使用分布式,力争 LOCAL 优先、REMOTE 为次、DISTRUBTE 是最坏的,综合执行状况要结合扫描数据范围和回表状况来看。

局部索引应用于争取 LOCAL 的场景,避免 DISTRUBTE。场景二、场影三、场影四 使用 LOCAL,但是场景五使用 DISTRUBTE。深思的是必须结合分区键才能完成唯一索引创建。这里内部的逻辑,局部索引要完成跨域,必须要与分区键绑定。

全局索引也可以实现 LOCAL 的场景,见场景六。笔者后续会做 OceanBase 的分布式环境。假设是分布式环境兼数据多的业务场景下,笔者揣测 DISTRUBTE 的机会性较大。

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。文章来源地址https://www.toymoban.com/news/detail-722491.html

SQLE 获取

类型 地址
版本库 https://github.com/actiontech/sqle
文档 https://actiontech.github.io/sqle-docs/
发布信息 https://github.com/actiontech/sqle/releases
数据审核插件开发文档 https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse

到了这里,关于OceanBase 全局索引与局部索引探索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 「OceanBase 4.1 体验」OceanBase:解读领先的分布式数据库系统,功能与体验全解析

    本文旨在介绍 OceanBase 4.1 版本的特点、更新内容和初体验,帮助读者了解和掌握这个开源分布式关系型数据库管理系统。如果你对大规模数据存储和处理的挑战感兴趣,或者正在寻找一种满足互联网领域高并发、高可靠性和高扩展性要求的数据库解决方案,本文将为你提供有

    2024年02月05日
    浏览(42)
  • OceanBase集群扩缩容

    ​ OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,天然支持多租户,租户间资源、数据隔离,集群运行的最小资源单元是Unit,每个租户在每个节点上只会运行一个Unit。 先看看集群整体架构图,下面集群的

    2024年01月21日
    浏览(35)
  • OceanBase基础概念

    一个集群由多个Zone组成,给集群内的一批机器打上同一个tag,则属于同一个Zone 不同的Zone可以对应不同城市、一个城市的不同机房、或者一个机房的不同机架 Zone个数=3,建议是奇数 每个zone均有且只有一份完整的副本;单Zone的故障不影响业务 每台OBServer相对独立,有独立计

    2024年01月21日
    浏览(39)
  • OceanBase架构概览

    了解一个系统或软件,比较好的一种方式是了解其架构,下图是官网上的架构图,基于V 4.2.1版本 OceanBase 使用通用服务器硬件,依赖本地存储,分布式部署在多个服务器上,每个服务器都是对等的,数据库内的 SQL 执行引擎具有分布式执行能力,每台服务器上运行一个observe

    2024年01月17日
    浏览(29)
  • OceanBase集群技术架构

    本文章学习自OceanBase官方培训资料,仅供学习、交流 分区 当一个表很大的时候,可以水平拆分为若干个分区,每个分区包含表的若干行记录。根据行数据到分区的映射关系不同,分为hash分区,List分区(按列表),range分区(按范围)等 每一个分区,还可以用不同的维度再分

    2024年01月20日
    浏览(37)
  • OceanBase写入限速源码解读

    OceanBase中的写入限速机制旨在控制系统中写入操作(一般写入操作包括插入、更新和删除等)的速率,目的是为了提高数据库系统的稳定性。本文主要通过以下2个参数来解释写入限速的实现机制。 **1.**writing_throttling_trigger_percentage:设置写入速度的阈值百分比。当内存使用达

    2024年02月03日
    浏览(27)
  • OceanBase集群部署

    我认为学习一个中间件比较好的方式是,先了解它的架构和运行原理,然后动手部署一遍,加深对它的了解,再使用它,最后进行总结和分享 本篇介绍OceanBase部署前提条件和集群部署 1.使用开源免费的社区版,企业版需要付费 社区版目前最新是V4.2.1_CE_BP3,它们之间的差异请

    2024年01月19日
    浏览(41)
  • OceanBase使用规范

    降低故障率和维护成本 所有使用OceanBase的数据库 关于分区表创建时的注意事项。 。 单表行数可能超过10亿行或者单表容量超过200GB,推荐进行创建分区表。 。如果预计三年后的数据量根本达不到这个级别,请不要在创建表时使用分区表。 分区表在表创建的时候需要指定,后续不

    2024年01月24日
    浏览(28)
  • OceanBase 安全审计之透明加密

    承接前文 OceanBase 安全审计的《传输加密》,本文主要实践数据透明加密,并验证加密是否有效。 作者:张乾,外星人2号,兼任四位喵星人的铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 1200 字,预计阅读需要 4 分钟

    2024年02月08日
    浏览(33)
  • OceanBase安全审计之传输加密

    上一期我们讲了关于 OceanBase 安全审计的《身份鉴别》和《用户管理与访问控制》 两个部分,OceanBase 的安全机制介绍其支持传输加密,今天我们主要来实践一下如何配置传输加密以及验证是否真的加密。 作者:金长龙 爱可生测试工程师,负责 DMP 产品的测试工作。 作者:陈

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包