在阿里巴巴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.%'
)
答案 0 :(得分:0)
是的,这是真的。
第一个查询仅扫描字段ID的100020结果行,然后扫描20行完整字段,但第二个查询扫描所有字段的100020。