vlambda博客
学习文章列表

mysql分页查询慢,怎么办?

春节前上线了一套监控系统,定时记录日志,今天节后开工第一天看了下数据量,单表已经200万+条记录了。打开监控系统,点了点相关查询页面,果然出现了卡顿转圈等待,差不多得等一两秒时间。

这问题很典型,大数据量下的分页查询。
大点来说,解决这种问题无非两种: 技术方面和产品方面。数据量大,基本上来说,大部分情况都是历史数据,这类数据查询展示的意义大不大,这个可以好好斟酌斟酌,可以和产品商量,砍掉类似历史数据查询的需求,曲线救国。当然,本次主要讲从技术方面解决这个问题,曲线救国以后再说。

200万条数据,说大不大,查询10条历史数据花费了一两秒,很显然是数据表和sql都很糟糕。数据表很简单,存储某个服务的请求记录,就是一张日志表,一个一个自增主键索引。
原sql :
select  *  from request_log_1 limit 1900000,10
很简单粗暴,explain一下,果然是全表扫描。不慢才怪!必须得想办法用上索引,另外尽可能少的扫描记录。
试试这样
select * from request_log_1 t1 inner join (
select id from request_log_1 limit 1900000,10) as t2
 on t1.id=t2.id
速度果然快多了,explain一下,右表走主键索引,再两表内连,效果显著。

下午顺道搜寻了一波mysql慢查询优化,内容太多了,等整理好了,整一个系列出来。