为了账号安全,请及时绑定邮箱和手机立即绑定

mysql: limit性能是不是比between或者in差不少

mysql: limit性能是不是比between或者in差不少

牧羊人nacy 2019-05-11 09:42:25
比如select*fromtablelimit100如果表里有100万个数据,那么这个语句会全表扫描,把符合要求的100万数据都筛选出来然后再取前100行而假如知道id是从1开始递增那么select*fromtablewhereidbetween1and100性能就会高很多?
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

形如select*fromtablelimit100的sql并不会造成全表扫描,除非加上查询或排序条件.
select*fromtablewhereidbetween1and100会比较快前提是id是主键或唯一键
以上两者的速度上不会有太大区别
                            
查看完整回答
反对 回复 2019-05-11
?
慕容森

TA贡献1853条经验 获得超18个赞

select*fromtablelimit100确实是走全表扫描,但是在全表扫描过程中,读到第100条记录就停止扫描了,所以时间上只是扫描100条记录的消耗,所以是很快的。走全表扫描再筛选100条记录的执行方式应该是下面这条SQL:selectfrom(selectfromtable)alimit100;
假如id从1开始递增,select*fromtablewhereidbetween1and100的执行效率也是视情况而定的:1.id有索引,主键或唯一键更佳,那就是走索引,扫100条就终止了;2.id上没有索引,那么就是全表扫描之后再筛选出1-100的数据。
                            
查看完整回答
反对 回复 2019-05-11
  • 2 回答
  • 0 关注
  • 877 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信