增加自增列 耗时长_如何通过自动增加索引,实现数据库查询耗时降低50%

dbaec5f49e606414de431d7ce88a5b15.gif

b6db36f4d37a26ab2c2125e94c38654f.png 作者 | 利开园 责编 | Carol 封图 | CSDN 下载自视觉中国

很多开发者都遇到类似这样的经历:一个产品功能开发测试都正常,发布上线后也正常,但是过一段后,如果有个活动或流量一大程序就突然卡了,也有可能流量正常也没搞活动,但是过一段时间后程序响应越来越慢,这个时候一般都要花很大精力去排查原因,最后发现是数据库查询没有索引导致的。流量大或数据量增加后会导致请求变慢,加上索引就正常了。

4ce67475e703899d61363bb7d3cd62d3.png

在小程序云开发的数据库场景下,我们会思考为什么会出现这样的问题?为什么用户总是会忘记加索引?能不能让用户无需关心这个问题,数据库自动加上索引?

c5be9da01ccf476ef43b668327633dc3.png

a5a39b15ae1b72a8a453585efa870a17.png

业界方案及其问题

针对这个问题,业界一般采用的是全量索引的方案:通过给所有的字段加单字段索引,引导用户主动添加多字段索引,从而实现保证所有的查询都有索引。但这样代价是会有大量的冗余索引,占用了大量的磁盘空间,而且,一些多字段的场景下,依然需要用户参与。这样的方案不能满足云开发 Cloudbase 的需求。

61aa82f4ae2897b7651c564bd80bab64.png

3145397feda3e6426d014b764d4fb5a6.png

云开发数据库自动化索引

在这个问题上,腾讯云和微信联合推出的小程序云开发,就做出了比较积极的应对措施。在其对业务进行分析后,提出了自己的解决方案 —— 分析数据并自动建立索引。针对系统中查询较慢的用户请求,自动分析出最佳建立索引的方式,并基于此建立索引,从而覆盖了单字段索引和多字段索引的情况。

想要理解自动建立索引,就要了解如何手动建立索引:对于单字段索引,建立起来比较简单,无论升序还是降序都是一样的。但对于多字段组合索引时,会有各种方式来建立索引,比如,三个字段的索引,就会受限制于索引是否覆盖了三个不同的字段、字段相应的升降序是否匹配,如果不匹配,可能索引就没有效果。

正因为加好索引并不简单,也证明自动加索引势在必行。而要做好自动增加索引遇到的主要问题有:

  1. 如何尽量减少索引个数避免影响写入性能和磁盘消耗过多。

  2. 如何避免添加索引导致的锁表影响正常的用户数据查询。

  3. 如何尽量规避加索引触发未知问题。

  4. 自动增加的索引如何自动删除。

针对这些问题,小程序云开发的解决方案是:通过筛选出耗时超过一定阈值的查询语句,从而获得需要进行优化的数据库查询,并依据数据库索引的前缀匹配规则,按照最少创建索引数量的原则,增加相应的索引,尽量让索引覆盖到所有的查询语句。

为了避免添加索引导致的锁表影响用户的数据查询,小程序云开发在具体添加索引的时候,采用了异步添加索引的方式,这是云开发数据库的一个关键能力。另外,通过限制单个数据库增加索引的频率和数量来规避未知风险,通过分析线上数据优化自动索引增加算法。最后会定期筛选那些长时间没有被查询命中的索引,对其进行删除,确保系统不会存在太多的冗余索引影响性能。

上述自动索引的整个过程对于用户来说,都是不可见且无感知的。不过,在实际的上线过程中,大盘的数据查询整体耗时减少了 50%,用户侧的体验也发现程序速度突然变快了。

0e282bbf4702fbfd923c245b3a8f47c2.png

4613019db3bd32d002d5ea20f2ccca98.png

54ae66e08a375675e4a57af1e050f6c5.png

总结

自动索引的方案帮助云开发 Cloudbase 解决了大多数的数据库查询较慢的问题,但程序总有覆盖不到的部分,对于这一部分,小程序云开发表示:后续会在开发阶段提示增加相应的索引,以及提供慢查询日志导出和自定义告警功能,让用户感知到问题, 从而在业务逻辑上进行优化。

作者简介:利开园,腾讯云云开发团队成员,腾讯高级开发工程师

17a627964ef88b5be836dd78d1410577.png

318be33b5a8fb64d81c19e4ad3f70826.png

更多精彩推荐

☞好莱坞科幻新片《b》,钦定 AI 机器人出演女主角!

☞比 Hive 快 500 倍!大数据实时分析领域的黑马

☞厉害!国内大学生计算机编程第一人,一人挑战一个队,百度最年轻 T10,现创业自动驾驶

☞牛!Python 也能实现图像姿态识别溺水行为了!

☞浅谈分布式存储中的网络通信

☞Balancer因通缩代币STA遭遇闪电贷攻击,价值50万美元资产被黑

4a2a7ff2908776c32c2f5eb2b71ab7d2.png你点的每个“在看”,我都认真当成了喜欢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值