Join queries with same execution plan

时间:2015-09-14 15:59:18

标签: sql-server join sql-execution-plan inner-query

I have two queries for the same task

ONE:

select * from table1 t1 
INNER JOIN table2 t2 
ON t1.id=t2.id

TWO

select * from table1 t1 
INNER JOIN (select * from table2) t2 
ON t1.id=t2.id

I checked the execution plan for both the queries.Both execution plans are same.But i doubt ,is there any difference in both the queries? If yes which one is more efficient?

1 个答案:

答案 0 :(得分:0)

您还没有提到哪个DBMS。 SQL只是声明性的 - 你告诉Oracle(或任何其他RDBMS)你想要什么。但执行计划最终决定如何执行查询。因此,如果两个查询的计划相同,那么您可以放心,性能没有差异。就RDBMS而言,两个查询都将执行同上。

尽管两个查询都相同,但第一个查询是最优先/最正确的方式。第二种方法意味着 RDBMS需要在加入之前对table2进行全面扫描,但Oracle的CBO通常足够聪明,可以将第二个重写为与第一个相同。这是你需要注意的事情。一些RDBMS具有强大的优化器,如果它降低了查询的执行成本,它甚至在导出计划之前重写您的查询。