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不要用!!!
原文地址:http://blog.51cto.com/8370646/2150173
时间: 2024-11-09 03:08:56