优化器是否区分JOIN ON和WHERE子句?

8 浏览
0 Comments

优化器是否区分JOIN ON和WHERE子句?

在Oracle中,

Select * from Table1 T1 
Inner Join Table2 T2 On T1.ID = T2.ID

Select * from Table1 T1, Table2 T2 
Where T1.ID = T2.ID

之间的性能有区别吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

如果查询优化器做得好,那么这两个查询之间应该没有区别。它们只是指定相同的预期结果的两种方式。

0
0 Comments

不!相同的执行计划,看看这两个表:

CREATE TABLE table1 (
  id INT,
  name VARCHAR(20)
);
CREATE TABLE table2 (
  id INT,
  name VARCHAR(20)
);

使用内连接的查询的执行计划:

-- with inner join
EXPLAIN PLAN FOR
SELECT * FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.id;
SELECT *
FROM TABLE (DBMS_XPLAN.DISPLAY);
-- 0 select statement
-- 1 hash join (access("T1"."ID"="T2"."ID"))
-- 2 table access full table1
-- 3 table access full table2

使用WHERE子句的查询的执行计划。

-- with where clause
EXPLAIN PLAN FOR
SELECT * FROM table1 t1, table2 t2
WHERE t1.id = t2.id;
SELECT *
FROM TABLE (DBMS_XPLAN.DISPLAY);
-- 0 select statement
-- 1 hash join (access("T1"."ID"="T2"."ID"))
-- 2 table access full table1
-- 3 table access full table2

0