之前被问题一个问题 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 为止。
数据结构中的那个链表。 |