简体   繁体   English

为什么带有子查询的MySQL LIMIT条件搜索比简单搜索快?

[英]Why MySQL LIMIT condition search with subquery is faster than simple search?

Mentioned in Alibaba Java Code Convention , see https://yq.aliyun.com/articles/69327 Rule 3.2.7 阿里巴巴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

is much faster than 比快得多

SELECT * FROM table1 WHERE condition LIMIT 100000, 20

This article explains that MySQL will fetch 100020 result rows and eliminate first 100000 instead of only fetch 20 rows. 本文说明,MySQL将获取100020个结果行并删除前100000个结果行,而不是仅获取20行。

Is it true in MySQL query engine? 在MySQL查询引擎中是真的吗? May be a bug or defect? 可能是错误或缺陷?

UPDATE UPDATE

assume table1 contains MANY columns (10+) and condition is not too complicated (eg ip LIKE '192.168.%' ) 假设table1包含MANY列(10+)并且条件不太复杂(例如ip LIKE '192.168.%'

Yes, it's true. 对,是真的。

The 1st query only scan 100020 result rows for field id then scan 20 rows full fields, but the second query scan 100020 for all fields. 第一个查询仅扫描100020结果行以获取字段ID,然后扫描20行完整字段,而第二个查询则扫描100020所有字段。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM