高性能MySQL(3th)(第六章 sql优化) ——01 减少冗余数据

mac2024-10-29  12

一 查询冗余的条数

如实际前台只需要TOP10,但是查询时使用 LIMIT 100。

解决方案:使用需要的大小限制。e.g. LIMIT 10,或者至多 LIMIT 20。

二 查询冗余的的列

避免使用 “  select * “ 这种不加选择的select语句,或者“  select  col1,col2 “而实际上只使用col1的情况。这会带来多余的I/O,数据传输,内存,CPU的消耗。

解决方案:只select 需要的列,即最精简的sql。

三 重复查询相同的数据

这里的“重复查询相同的数据”不仅仅是sql语句相同,并且涉及的表基本是“稳定不变”的,即每次查询的结果也基本是相同的。换言之,对于这种基本稳定但是又不是永恒不变的数据,根本用不着每次都去请求(当然,也绝对不能写死)。

例如:

一个BBS系统,用户的头像URL基本是稳定的,而用户评论的地方通常需要显示该用户的头像,如果一个用户多次评论, 则每次显示都要回数据库查询头像的URL,进而拿到头像图片进行显示。这样重复查询非常浪费且不必要,这个问题一般怎么解决呢?

在初次查询时做一个缓存,以后的每次查询都先查缓存即可,如果用户改了头像,则在改头像操作返回成功之前,更新该用户头像URL缓存,或者令其原来的头像URL失效,每次缓存查找不到则从数据库中查找,并回填缓存。

 

最新回复(0)