mysql 大数据表 order by + limit 导致查询缓慢问题
数据表有200万行,单表分页查询,当offset 2002470 很大的时候 加上 order by 很慢很慢
sql:
SELECTtable1
.id
FROMtable1
INNER JOIN table2
ON table1
.id
= table2
.id
ORDER BYstart_time
DESC
LIMIT 1 OFFSET 2002470
其中start_time是普通索引
有没有好的办法优化的?
show your tables!!!
start_time
如果是不重复的第一页查询
每次将第十条记录的
start_time
记作last_time
作为下次查询的条件以后得每一页
如果
start_time
是大量重复的,或许可以 考虑联合id
一起作为查询条件,或者是冗余一个新的字段(例如将start_time
的精度放大一些)数据量大慢主要是2个,1是统计count() 慢,2是分页分到最后慢, 解决就是1不用count了,不要总数,2是用id来分页,每次记录每页的最后一个id 然后条件上多加一个id > $id 你这200万还不算多,上千万后count首次统计慢得要死,count只要有数据变化就会从新来一次不走缓存,慢得一屁
很奇怪 : 这个sql 运行 只要 0.564s
我给OFFSET增加到68000 就用了6秒多 是什么瓶颈导致的呢?
受影响的行: 0 时间: 6.429s
可以用id > x and id < x去优化下分页
查单张表,把 另一张表id取出来,map 把数据映射上去呗