【发布时间】:2011-01-05 22:58:29
【问题描述】:
我在我的 SQL 查询中使用 NOT IN。
例如:
select columnA
from table1
where columnA not in (
select columnB
from table2)
这部分查询怎么可能
select columnB
from table2
需要 30 秒才能完成,但上面的整个查询需要 0.1 秒才能完成?? 完整的查询不应该花费 30 秒 + 吗?
顺便说一句,两个查询都返回有效结果。
谢谢!
评论回复
是不是因为第二个查询没有 实际完成但只有 返回前 'x' 行(out 一张非常大的桌子?)
不,查询在 30 秒后完成,返回的行数不多(例如 50)。
但@Aleksandar 想知道为什么 与表演有关的问题 杀手太快了。
完全是我的观点
还有选择不同的多长时间 table2中的columnB要执行吗?
其实原来的查询是“select distinct...
【问题讨论】:
-
是不是因为第二个查询实际上还没有完成,而是只返回了前“x”行(在一个非常大的表中?)
-
table2 是否非常大,因为对列的正常选择需要 30 秒才能完成?
-
你能看看两者的执行计划吗?
-
或更好:发布两个计划以及两个表的 DDL。
-
@Aleksandar Tomic,您的问题的答案在于您拒绝向我们提供的细节。您需要意识到 SQL 本质上是声明性的。你指定你想要的“什么”,然后让数据库提出一个解决它的算法。现在,由于底层细节,数据库正在做一些有趣的事情。如果您向我们展示确切的查询、其中的解释计划以及所有引用表的创建脚本,这些详细信息将会显示出来。