【发布时间】:2015-03-25 10:08:43
【问题描述】:
谁能提供一个示例或解释为什么要查询表单:
SELECT a.col0
FROM a INNER JOIN b on a.id = b.id
WHERE b.cond = 0
会慢于:
SELECT c.col1
FROM c
WHERE c.col2 IN (
SELECT a.col0
FROM a INNER JOIN b on a.id = b.id
WHERE b.cond = 0
) AND c.col2 = 0
如果语法不正确,请原谅我,但一般的想法是最里面的查询实际上比包含最里面的查询的子查询慢。
【问题讨论】:
-
因为在运行外部查询时缓存了来自内部查询的数据?因为优化器选择了不同的访问路径?因为解析两个查询时统计信息不同?如果你有一个真实的例子,那么看看这两个执行计划。
-
或者可能是因为 c 中没有 col2 = 0 的行?或者也许第一个查询返回很多行,而第二个返回少量,所以返回结果给你的时间更少?