技术分享 | OceanBase 全局索引与局部索引探索


外向笑小鸭子
外向笑小鸭子 2024-01-02 11:06:10 63732
分类专栏: 资讯

1OceanBase 的索引

索引和分区是数据库的关键核心基本功能,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 ;

2索引使用场景

场景一:没有加索引

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;

场景三:分区查找

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


场景四:分区加索引进行查找

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;

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

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;




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

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

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

3总结

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

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

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

 

本文关键字:#OceanBase# #索引#





网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=34119
赞同 0
评论 0 条
外向笑小鸭子L1
粉丝 0 发表 625 + 关注 私信
上周热门
Kingbase用户权限管理  2020
信刻全自动光盘摆渡系统  1749
信刻国产化智能光盘柜管理系统  1419
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1014
银河麒麟打印带有图像的文档时出错  924
银河麒麟添加打印机时,出现“server-error-internal-error”  715
麒麟系统也能完整体验微信啦!  657
统信桌面专业版【如何查询系统安装时间】  633
统信操作系统各版本介绍  624
统信桌面专业版【全盘安装UOS系统】介绍  598
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!