PolarDB 全局索引和一般索引

2023/08/10 MySQL 共 797 字,约 3 分钟
Bob.Zhu

接手的项目中有很多以g_i_xxxxx开头的表,看了下PolarDB的索引策略,在这里稍作记录。

普通索引

索引介绍

每个分区表中都创建自己分区表中数据的索引,在PolarDB中的关键字是 KEY

使用场景

多条件查询的场景更有用,因为需要

全局索引

索引介绍

全局索引相当于创建一个索引表,一般是两个字段:主键ID以及需要创建索引的列,这样相当于只查询一个索引表就可以获取到所有符合条件的主键ID, 避免了去每个分区表中进行搜索的操作。在PolarDB中的关键字是 GLOBAL INDEX

使用场景

全局索引更适合单个条件查询的场景,可以通过查找全局索引定位到需要查询的主键ID,然后根据主键ID在分区表中根据ID直接定位查询对应数据。

方法借鉴

可以看出来,核心思想就是冗余一分主键ID和索引字段的值,拿空间换时间,而且跟ES的思想有点像。 那么,如果想要在MySQL中实现应该怎么操作呢?

  • 先根据哈希算法,进行数据库的分区分表
  • 创建索引表,核心两个字段:主键ID、索引字段(索引表其实也可以进行哈希分表,不过是根据索引字段进行哈希,这样直接查询)
  • 插入数据的时候,同时插入索引表
  • 查询数据的时候,先根据查询条件找对应的索引表,查询符合条件的主键
  • 根据符合条件的主键,进行哈希分组,去各个分区表中根据主键进行数据查询
  • 将所有分区表中的数据进行排序汇总,并返回

可以参考 MySQL - 一种简单易懂的 MyBatis 分库分表方案, 手动实现相关分表策略,再结合全局索引思想,就可以自己简单实现PolarDB的核心能力了(计算和存储分离除外~)。

不过可以将索引的分区分表查询策略进行公共方法的封装,会更加方便。

参考资料

开始写作吧

![image-alter](/image/post/2023/08/10/03/xxx.png)

文档信息

Search

    Table of Contents