【发布时间】:2021-02-15 10:51:18
【问题描述】:
给定
-
以下架构:
CREATE TABLE employees ( name CHAR, PRIMARY KEY id INT ); -
表格按id排序
-
表中有 100 个从 1 到 100 的唯一 ID。
示例
| name | id |
|---------|----|
| Lynne | 1 |
| Johnny | 2 |
| D'Andra | 3 |
| Kimmel | 4 |
| ... |
目标
获取 10 个 id 大于或等于 3 的人。
问题
使用select name from employees order by id limit 10 offset 3 或select name from employees where id >= 3 and id <13 order by id 会更快吗?为什么?
到目前为止我检查过的内容
Does adding 'LIMIT 1' to MySQL queries make them faster when you know there will only be 1 result?:这表示使用限制比不使用限制要快,但它不会将其与范围查询进行比较。
Select query with offset limit is too much slow:这表示偏移量通常很慢,因为它需要遍历所有行才能到达偏移量。它没有讨论对于任何整数 x 使用 offset x 是否比 id >= x 慢?
【问题讨论】:
-
我认为这两个 SQL 查询都应该有一个明确的
ORDER BY子句。它不会改变任何东西,但我质疑您关于“表格按 id 排序”的断言。关系是没有定义顺序的集合。您看到的是id作为主键的工件,MySql 已决定默认按主键顺序检索行。明天它可以做一些不同的事情。 -
完成,谢谢@Booboo
-
不要假设从 3 到 12 的 id 没有间隔
-
我想你可以自己测试一下。那么你只剩下为什么的问题了?
-
@Strawberry,感谢您的评论;我一直在这里测试它:sqlfiddle.com/#!9/47da9e/3。有关如何进行更彻底测试的任何提示?在此示例中范围查询更快,但我不确定如何进行大规模测试。
标签: mysql sql performance range limit