Select * from table limit 10慢了,表有100万条数据,没有where条件,就是慢了,如何优化

  • 以sbtest1表为例,100万数据
    select from sbtest1 limit 10; 执行时间0.00sec
    select
    from sbtest1 limit 550000,10; 执行时间0.99 sec
    select * from sbtest1 limit 990000,10; 执行时间1.32 sec

  • 可以改写sql为:
    select * from sbtest1 where id between 990001 and 990010;
    select语句没有where条件,limit慢咋办?_第1张图片
  • 看看执行计划
    select语句没有where条件,limit慢咋办?
  • 将sbtest1表提升至1000w条数据
    select语句没有where条件,limit慢咋办?
    select语句没有where条件,limit慢咋办?_第2张图片
  • 随便输入两个数字,0.02 sec很快!再看看下面随便查100行的速度,也是超级快!
    select语句没有where条件,limit慢咋办?
    虽然不知道实际有没有这么写,但是这种写法确实是我觉得目前最效率的。

  • 网上有很多教这种写法:
    select from sbtest1 where id >= (select id from sbtest1 limit 990000,1) limit 10;
    查出来的数据不一样,如下
    select语句没有where条件,limit慢咋办?_第3张图片
    我试了试改良写法,取的数据是正确
    select
    from sbtest1 where id >= (select id from sbtest1 order by id limit 990000,1) limit 10;