CSDN如何通过自动增加索引,实现数据库查询耗时降低50%
本文插图
作者 | 利开园 责编 | Carol 封图 | CSDN 下载自视觉中国 很多开发者都遇到类似这样的经历:一个产品功能开发测试都正常 , 发布上线后也正常 , 但是过一段后 , 如果有个活动或流量一大程序就突然卡了 , 也有可能流量正常也没搞活动 , 但是过一段时间后程序响应越来越慢 , 这个时候一般都要花很大精力去排查原因 , 最后发现是数据库查询没有索引导致的 。 流量大或数据量增加后会导致请求变慢 , 加上索引就正常了 。
本文插图
在小程序云开发的数据库场景下 , 我们会思考为什么会出现这样的问题?为什么用户总是会忘记加索引?能不能让用户无需关心这个问题 , 数据库自动加上索引?
本文插图
【CSDN如何通过自动增加索引,实现数据库查询耗时降低50%】
业界方案及其问题针对这个问题 , 业界一般采用的是全量索引的方案:通过给所有的字段加单字段索引 , 引导用户主动添加多字段索引 , 从而实现保证所有的查询都有索引 。 但这样代价是会有大量的冗余索引 , 占用了大量的磁盘空间 , 而且 , 一些多字段的场景下 , 依然需要用户参与 。 这样的方案不能满足云开发 Cloudbase 的需求 。
本文插图
云开发数据库自动化索引在这个问题上 , 腾讯云和微信联合推出的小程序云开发 , 就做出了比较积极的应对措施 。 在其对业务进行分析后 , 提出了自己的解决方案 —— 分析数据并自动建立索引 。 针对系统中查询较慢的用户请求 , 自动分析出最佳建立索引的方式 , 并基于此建立索引 , 从而覆盖了单字段索引和多字段索引的情况 。
想要理解自动建立索引 , 就要了解如何手动建立索引:对于单字段索引 , 建立起来比较简单 , 无论升序还是降序都是一样的 。 但对于多字段组合索引时 , 会有各种方式来建立索引 , 比如 , 三个字段的索引 , 就会受限制于索引是否覆盖了三个不同的字段、字段相应的升降序是否匹配 , 如果不匹配 , 可能索引就没有效果 。
正因为加好索引并不简单 , 也证明自动加索引势在必行 。 而要做好自动增加索引遇到的主要问题有:
- 如何尽量减少索引个数避免影响写入性能和磁盘消耗过多 。
- 如何避免添加索引导致的锁表影响正常的用户数据查询 。
- 如何尽量规避加索引触发未知问题 。
- 自动增加的索引如何自动删除 。
为了避免添加索引导致的锁表影响用户的数据查询 , 小程序云开发在具体添加索引的时候 , 采用了异步添加索引的方式 , 这是云开发数据库的一个关键能力 。 另外 , 通过限制单个数据库增加索引的频率和数量来规避未知风险 , 通过分析线上数据优化自动索引增加算法 。 最后会定期筛选那些长时间没有被查询命中的索引 , 对其进行删除 , 确保系统不会存在太多的冗余索引影响性能 。
上述自动索引的整个过程对于用户来说 , 都是不可见且无感知的 。 不过 , 在实际的上线过程中 , 大盘的数据查询整体耗时减少了 50% , 用户侧的体验也发现程序速度突然变快了 。
- 【】财鑫闻丨两市成交量连续2日破万亿,牛市真的来了?下一步如何擒“牛”?
- 公司|多家A股公司通过股权基金认购中芯国际科创板上市股票
- 郭缤璐|陆正耀、刘二海、黎辉董事罢免议案获通过
- 健康干货桶|重症肝病患者可否活动?如何掌握?
- 精选泛科技一加8续航遭质疑:上半年最全机型横评出炉,结果如何?
- 印度■15:0全票通过!莫迪“梦碎”联合国,印度恐将成为“全球公敌”!
- “健康北京”微信公众号|新型冠状病毒肺炎确诊病例如何分型?北京中医医院院长解答
- 央视网|上直播、转内销……外贸企业如何突围?
- 父母|今天,我们该如何做父母?
- 我们应该如何改善循环性肥胖呢,这么做令你快速爬出反复肥胖的恶性循环,这样的你不反弹才怪呢