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

时间:2017-02-14 06:38:00

标签: mysql subquery limit

阿里巴巴Java Code Convention 中提及,请参阅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包含MANY列(10+)且条件不太复杂(例如ip LIKE '192.168.%'

1 个答案:

答案 0 :(得分:0)

是的,这是真的。

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