select语句没有where条件,limit慢咋办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select语句没有where条件,limit慢咋办?相关的知识,希望对你有一定的参考价值。

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;
    技术分享图片
  • 看看执行计划,我靠,才扫描10行,能不快吗?千万级表又算啥?
    技术分享图片
  • 将sbtest1表提升至1000w条数据
    技术分享图片
    技术分享图片
  • 随便输入两个数字,0.02 sec很快!再看看下面随便查100行的速度,也是超级快!
    技术分享图片
    虽然不知道实际有没有这么写,但是这种写法确实是我觉得目前最效率的。

  • 错误示范:
    网上有很多教这种写法:
    select from sbtest1 where id >= (select id from sbtest1 limit 990000,1) limit 10;
    大错特错,查出来的数据根本不一样,如下
    技术分享图片
    我试了试改良写法,虽然取的数据正确,但是跟没优化一样慢!!!
    select
    from sbtest1 where id >= (select id from sbtest1 order by id limit 990000,1) limit 10;
    上面标红的两个SQL不要用!!!

以上是关于select语句没有where条件,limit慢咋办?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询语句SELECT和数据条件过滤

MySQL中的常见子查询语句

select语句

数据库

sql基本查询语句

MySQL 查询语句的 limit, offset 是怎么实现的?