mysql - 为什么MySQL使用子查询的LIMIT条件搜索比简单搜索更快?

标签 mysql subquery limit

阿里巴巴Java代码约定中提到,参见https://yq.aliyun.com/articles/69327规则3.2.7

SELECT a.* FROM table1 a, (SELECT id FROM table1 WHERE condition LIMIT 100000, 20) b WHERE a.id = b.id

快得多
SELECT * FROM table1 WHERE condition LIMIT 100000, 20

本文解释了 MySQL 将获取 100020 个结果行并消除前 100000 个结果行,而不是只获取 20 行。

MySQL查询引擎中是这样吗?可能是错误或缺陷?

更新

假设 table1 包含许多列(10+)并且条件不太复杂(例如 ip LIKE '192.168.%')

最佳答案

是的,确实如此。

第一个查询仅扫描 100020 个结果行的字段 id,然后扫描 20 行完整字段,但第二个查询扫描 100020 个所有字段。

关于mysql - 为什么MySQL使用子查询的LIMIT条件搜索比简单搜索更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219452/

相关文章:

mysql - MySQL 中字符串字段和生日的数据类型

mysql - 过滤多对多映射表中的行

api - 使用 magento API V2 限制结果数量

c# - SQL连接错误或数据库表名错误

mysql - 如何在 laravel 中编写 sql 连接查询

mysql - 在 SELECT 中使用 SUM() 更好,还是在 SUB-SELECT 中使用 SUM() 更好?

mysql - 转义 % 登录子查询

Mongodb 在内存不足时终止

swift - 如何为 Swift UI 添加字符的最大长度

mysql - 查找一列不同的 "duplicate"行