Sql server 使用相同的执行计划联接查询
对于同一任务,我有两个查询 ONE:Sql server 使用相同的执行计划联接查询,sql-server,join,sql-execution-plan,inner-query,Sql Server,Join,Sql Execution Plan,Inner Query,对于同一任务,我有两个查询 ONE: 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只是声明性的—您可以告诉Oracl
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在加入之前需要对表2进行完整扫描,但Oracle的CBO通常足够聪明,可以将第二种方法重写为与第一种方法相同的方法。这是你需要注意的事情。一些RDBMS具有强大的优化器,如果可以降低查询的执行成本,则可以在生成计划之前重写查询。将哪些DBMS添加到标记中。它将帮助您让特定的DB用户更快地注意到您的问题。为了回答您的问题,几乎总是需要这些信息