DRDS 全局二级索引 (Global Secondary Index, GSI)

#DRDS 全局二级索引 (Global Secondary Index, GSI)


###一、版本限制

MySQL 版本 >= 5.7, 并且 DRDS 版本 >= 5.4.1

###二、 基本原理

1、主表+索引表(每个GSI对应一张索引表)-》下发到每一个分库中
2、写=》如何保证分库一致的?通过XA事务
3、读=》先读索引表,查询列中索引表的覆盖列全部包括,直接返回索引表数据,否则回表处理(回查主表取得缺失列的值)
###三、 使用

1、创建
DRDS 对 MySQL DDL 语法进行了扩展,增加定义 GSI 的语法。使用方式与在 MySQL 上创建索引一致:
建表时定义 GSI

在这里插入图片描述

建表后添加 GSI
在这里插入图片描述

其中:
索引名 :作为索引表的名字,用于创建索引表
索引列 :索引表的分库分表键,即索引分库分表子句中用到的所有列
覆盖列 :索引表中的其他列,默认包含主键和主表的全部分库分表键
索引分库分表子句 :索引表的分库分表算法,与 CREATE TABLE 中分库分表子句的语法一致

2、 使用
1)通过 HINT 指定索引
FORCE INDEX({index_name})
/+TDDL:INDEX({table_name/table_alias}, {index_name})/
IGNORE INDEX与USE INDEX 不使用那些索引、使用那些索引
2)索引选择
对于带有全局二级索引的主表查询,DRDS会自动选择出优化器认为代价最低的索引表。(目前只支持覆盖索引选择)

!!#ff0000 *特别要注意在使用的时候有一些限制和约定(DML、DDL)!!

###四、 FAQ

1、 全局二级索引解决什么问题?

如果查询的维度与逻辑表的拆分维度不同,会产生跨分片查询。随着跨分片查询增多,会产生查询卡慢、连接池耗尽等性能问题。GSI 通过增加拆分维度来减少跨分片查询,消除性能瓶颈,创建 GSI 时需要注意选择与主表不同的分库分表键。

2、 全局二级索引和局部索引的关系?

局部索引: 分布式数据库中,如果数据行和对应的索引行保存在相同分片上,称这种索引为局部索引。DRDS 中特指物理表上的 MySQL 二级索引
全局二级索引: 不同于局部索引,如果数据行和对应的索引行保存在不同分片上,称这种索引为全局二级索引,主要用于快速确定查询涉及的数据分片
两者的关系: 需要搭配使用,DRDS 通过 GSI 将查询下发到单个分片后,该分片上的局部索引能够提升分片内的查询性能。

###五、 性能对比

执行环境
  • CPU:2.6 GHz 六核Intel Core i7
  • 内存:16G
  • 操作系统:macOS Catalina(10.15.2)
  • 同一个docker容器中

####压测工具

ab -c 100 -n 10000 -k url


####执行流程

api->userRpc->db


####测试流程

SELECT COUNT() FROM users; !!#ff0000 COUNT():10w+!!

1、 读取一行数据(select *)

1)drds(5.6.29-TDDL-5.3.7-15460044)主表执行
执行的sql:
!!#0000ff SELECT * FROM users WHERE mobile=’;!!

joex@joexdembp ~ % ab -c 100 -n 10000 http://127.0.0.1/
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        swoole-http-server
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /
Document Length:        353 bytes

Concurrency Level:      100
Time taken for 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值