阿里巴巴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/