我对同一任务有两个查询
一:
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
我检查了两个查询的执行计划。两个执行计划是相同的。但我怀疑,这两个查询有什么区别吗?如果是,哪个更有效?
我对同一任务有两个查询
一:
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
我检查了两个查询的执行计划。两个执行计划是相同的。但我怀疑,这两个查询有什么区别吗?如果是,哪个更有效?
您还没有提到哪个 DBMS。SQL 只是声明性的——你告诉 Oracle(或任何其他 RDBMS)你想要什么。但是执行计划最终决定了查询的执行方式。因此,如果两个查询的计划相同,那么您可以放心,性能不会有任何差异。就 RDBMS 而言,这两个查询都将同上执行。
即使两个查询相同,但第一个查询是最首选/正确的方法。第二种方法意味着RDBMS 需要在加入之前对 table2 进行 FULL 扫描,但 Oracle 的 CBO 通常足够聪明,可以将第二个重写为与第一个相同。这是您需要注意的事情。一些 RDBMS 具有强大的优化器,如果它降低了查询的执行成本,甚至可以在派生计划之前重写您的查询。