案例背景
- 商品评论查询
- 评论数据量很大,拥有十亿量级的评论数据,所以做了分裤分表,单表数据在百万级别
因为场景都是查询某一个商品的评论,所以同一商品的评论放在一个表里
存在问题
深度分页
SQL:select * from comments where product_id=’xx’ and is_good_comment=’1’ order by id desc limit 100000,20
- product_id:商品ID;有索引
- is_good_comment:是否是好评;无索引
查询过程:先走product_id的索引筛选出符合要求的数据,然后要进行回表判断is_good_comment,假设有几十万条评论,就要进行几十万次的回表;筛选完毕后,假设有十万条数据,还要对这十万条数据使用临时磁盘文件进行排序
优化后的SQL
select * from comments a,(select id from comments where product_id=’xx’ and is_good_comment=’1’ order by id desc limit 100000,20) b where a.id=b.id
磁盘IO负载高
- 网络负载高,带宽打满
- CPU负载高
- 排查工具:mysql profilling
