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是普通索引
有没有好的办法优化的?
关于 LearnKu
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 把数据映射上去呗