Code Bye

offset 实现原理

 

之前被问题一个问题

select * from t  limit 0 offset 1000;

mysql内部offset是怎么实现跳转到第1000条的。
我被问住了,求帮忙解答….

40分
这个需要看源代码了。
个人感觉是MYSQL如果没有索引,则仍然是需要逐条找到第1000行,然后输出。
30分
恩,同意沙发。
确实是逐条找到第1000行,然后输出。
他这么问的目的是想考你对sql语句优化的理解。
既然select * from t  limit 0 offset 1000;是逐条找到第1000行,那么假如这个表只有1010条数据,那么无异于遍历全表
优化方法: select * from twhere id >1000limit 1,1000
这样mysql就会直接定位到第1000行。

另附:在select前加上explain可以查看 查询执行计划,从rows对应的值可以看到可能扫描的行数。

30分
基本同意 1 # 说的,不管有没有索引,都会一条一条的数下来的,直到到1000 为止。

数据结构中的那个链表。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明offset 实现原理