比如 select * from table limit 100
如果表里有100万个数据,
那么这个语句会全表扫描,把符合要求的100万数据都筛选出来
然后再取前100行
而假如知道id是从1开始递增
那么select * from table where id between 1 and 100
性能就会高很多?
比如 select * from table limit 100
如果表里有100万个数据,
那么这个语句会全表扫描,把符合要求的100万数据都筛选出来
然后再取前100行
而假如知道id是从1开始递增
那么select * from table where id between 1 and 100
性能就会高很多?
select * from table limit 100确实是走全表扫描,但是在全表扫描过程中,读到第100条记录就停止扫描了,所以时间上只是扫描100条记录的消耗,所以是很快的。
走全表扫描再筛选100条记录的执行方式应该是下面这条SQL:
select from (select from table) a limit 100;
假如id从1开始递增,select * from table where id between 1 and 100的执行效率也是视情况而定的:
1.id有索引,主键或唯一键更佳,那就是走索引,扫100条就终止了;
2.id上没有索引,那么就是全表扫描之后再筛选出1-100的数据。
4 回答1.8k 阅读✓ 已解决
8 回答1.4k 阅读
3 回答1.4k 阅读✓ 已解决
4 回答2.4k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答1.8k 阅读
1 回答983 阅读✓ 已解决
形如
select * from table limit 100
的 sql 并不会造成全表扫描, 除非加上查询或排序条件.select * from table where id between 1 and 100
会比较快前提是 id 是主键或唯一键以上两者的速度上不会有太大区别