小编新入职了一家新公司,第一个任务是根据条件导出订单表中的数据到文件中,小编心想:这也太简单了,于是很快写好了如下语句,并且告诉测试自己的代码是免测产品。
语句如下:
select * from orders where name=‘lilei’ and create_time>'2020-01-01 00:00:00' limit start,end
复制代码
没想到上线一段时间后,生产开始预警,显示这条sql为慢SQL,执行时间50多秒,严重影响到了业务。
小编赶紧请教大佬猿猿帮忙查找原因,猿猿很快就帮其解决了,并且给小编做了以下实验:
一、测试实验
mysql分页直接用limit start, count分页语句:
select * from product limit start, count
复制代码
当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条),如下:
select * from product limit 10, 20 0.016秒
select * from product limit 100, 20 0.016秒
select * from product limit 1000, 20 0.047秒
select * from product limit 10000, 20 0.094秒
复制代码
我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的, 那么我们把起始