失效链接处理 |
如何设计一个排行榜? PDF 下载
本站整理下载:
相关截图:
![]()
主要内容:
今天让我们从程序设计的⻆度,来看看如何设计⼀个排⾏榜!
我们先从最基础的实现⽅式来说起。
第⼀种要介绍的实现⽅式就是直接使⽤ MySQL 的 ORDER BY 关键字。 ORDER BY 关
键字可以对查询出来的数据按照指定的字段进⾏排序。
我相信但凡是学过 MySQL 的⼈,⼀定都⽤过 ORDER BY 关键字!没⽤过的,先不要看
下⾯的⽂章了,麻烦默默反思 3 分钟。
我之前在⼀个⽤户数据量不⼤(6w ⽤户左右)并且排序需求并不复杂的项⽬中使⽤的就
是这种⽅法。
这种⽅式的优缺点也⽐较明显。好处是⽐较简单,不需要引⼊额外的组件,成本⽐较低。
坏处就是每次⽣成排⾏榜都⽐较耗时,对数据库的性能消耗⾮常之⼤,数据量⼀⼤,业务
场景稍微复杂⼀点就顶不住了。
我们这⾥创建⼀个名为 cus_order 的表,来实际测试⼀下这种排序⽅式。为了测试⽅
便, cus_order 这张表只有 id 、 score 、 name 这 3 个字段。
我们定义⼀个简单的存储过程(PROCEDURE)来插⼊ 100w 测试数据。
存储过程定义完成之后,我们执⾏存储过程即可!
等待⼀会,100w 的测试数据就插⼊完成了!
为了能够对这 100w 数据按照 score 进⾏排序,我们需要执⾏下⾯的 SQL 语句。
为了能够查看这套 SQL 语句的执⾏时间,我们需要通过 show profiles 命令。
不过,请确保你的 profiling 是开启(on)的状态(可以通过 show variables 命
令查看)。
默认情况下, profiling 是关闭(off)的状态,你直接通过 set
@@profiling=1 命令即可开启。
然后,我们就查询到了具体的执⾏速度。
可以看到,⼀共耗时了接近 4 s。
如何优化呢? 加索引并且限制排序数据量 是⼀种⽐较常⻅的优化⽅式。
我们对 score 字段加索引,并限制只排序 score 排名前 500 的数据。
这个时候,我们再执⾏下⾯的 SQL 语句,速度就快了很多,只需要 0.01 秒就排序了前
500 名的数据。
当然了,这只是⼀个最简单的场景,实际项⽬中的复杂度要⽐我这⾥列举的例⼦复杂很
多,执⾏速度也会慢很多。
不过,能不⽤ MySQL 的 ORDER BY 关键字还是要看具体的业务场景。如果说你的项⽬
需要排序数据量⽐较⼩并且业务场景不复杂的话(⽐如你对你博客的所有⽂章按照阅读量
来排序),我觉得直接使⽤ MySQL 的 ORDER BY 关键字就可以了。
|