MySQL查询limit 500000, 10和limit 10速度比较

limit 500000,10和limit 10速度一样快吗

共同点

两种查询方式,对应limit offset, size和limit size两种方式。
而其实limit size, 相当于limit 0, size。也就是从0开始取size条数据。

区别

也就是说,两种方式的区别在于offset是否为0

内部执行逻辑

先来看下limit sql的内部执行逻辑,MySQL内部分为server层和存储引擎层一般情况下存储引擎都用innodb。server层有很多模块,其中需要关注的是执行器是用于跟存储引擎打交道的组件。

执行器可以通过调用存储引擎提供的接口,将一行行数据取出

当这些数据完全符合要求(比如满足其他where条件),则会放到结果集中,最后返回给调用mysql的客户端。

举例说明

以主键索引的limit执行过程为例:
执行select * from page order by id limit 0, 10;

select后面带的是星号,也就是要求获得行数据的所有字段信息。

server层会调用innodb的接口,在innodb里的主键索引中获取到第0到第10条完整行数据,依次返回给server层,并放到server层的结果集中,返回给客户端。

把offset搞大点,比如执行的是select * from page order by id limit 500000,10;

server层会调用innodb的接口,由于这次的offset=500000,会在innodb里的主键索引中获取到第0到(500000 + 10)条完整行数据,返回给server层。

之后根据offset的值挨个抛弃,最后只留下最后面的size条,也就是10条数据,放到serer层的结果集中,返回给客户端。

可以看出,当offset非0时,server层会从引擎层获取到很多无用的数据,而获取的这些无用数据都是要耗时的。

结论

因此,mysql查询中limit 500000,10会比limit更慢。

具体原因

原因是limit 500000,10会取出500000 + 10条数据,并抛弃前500000条,这部分耗时更大。

参考资料limit500000,10和limit 10速度一样快吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值