【发布时间】:2015-04-16 21:57:27
【问题描述】:
当我开始在大表上编写 SQL 查询时,我想知道哪个最有效。在我看来,它们看起来都一样。寻找有关 SQL 如何分解和执行这些查询的解释
选项 1:
select a.*
from table_a a
where a.column in (select filter from table_b)
选项 2:
select a.*
from table_a a, table_b b
where a.column=b.filter
选项 3:
select a.*
from table_a a
inner join table_b b
on a.column=b.filter
【问题讨论】:
-
检查执行。计划,你会发现这三个语句都是一样的。如果没有,那么您在某个地方有问题。
-
@ibre5041 。 . .三个语句的执行计划不应该相同,因为第一个执行的操作与其他两个不同。
-
SQL 声明性语言。因此,如果两个语句具有相同的“含义”,那么它们也应该具有相同的 exec。计划。如果您在第一种情况下添加了约束,那么执行计划将是相同的。例如尝试添加唯一的,而不是 NULL 到过滤列。但我知道通常第一种情况是不同的 - 基数不同。
标签: sql oracle filter inner-join where