大项目学习 4 | 青训营笔记

78 阅读2分钟

这是我参加「第五届青训营 」伴学笔记创作活动的第 9 天

本文记录一下在大项目中遇到的问题,并作出现阶段的解答。暂作保留,后续回头再看,可能会发现进步多多。

记录问题如下:

  1. 如何提升mysql的查询效率

如何提升mysql的查询效率

在编写点赞模块的时候,有一个操作是查询用户曾经对什么内容进行过点赞。

由于暂时没有使用redis,或者我们想要持久化存储这些点赞内容,但是同时又希望能够进行快速查询。所以我们将要对用户的点赞使用索引操作。

什么是索引。

可以类比于字典的目录,就是将本来需要平铺式遍历查询的内容,做一个排序,再分类检索。通过不断缩小范围,最后得到想要的结果。

索引对于查询的优化非常非常大,对于数百万级别的数据而言,加了索引的查询可以在非常短的时间内查询到,而遍历可能会导致卡死。

索引的实现原理是B+数。B+树可以看做是二叉搜索树的多路版本。即每个节点可以有多个分叉。比如一个节点有1000个分叉,那么三层高度的B+数可以轻易在数百万的数据体量进行查找。

我们对于点赞内容的查询,可能会涉及到多个字段。

那么我们可以设计联合索引。以用户为主要索引,以时间为次要索引。按照最左匹配原理可以快速搜索指定的记录。

下一步我们希望在redis中存储这样的点赞数据。因为这样的查询也是相对费时的,如果每次查询自己的点赞列表都要从mysql中进行搜索,可能开销仍然比较大。