0

我对同一任务有两个查询

一:

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

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

我检查了两个查询的执行计划。两个执行计划是相同的。但我怀疑,这两个查询有什么区别吗?如果是,哪个更有效?

4

1 回答 1

0

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

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

于 2015-09-14T16:40:51.943 回答