Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用相同的执行计划联接查询_Sql Server_Join_Sql Execution Plan_Inner Query - Fatal编程技术网

Sql server 使用相同的执行计划联接查询

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

对于同一任务,我有两个查询

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只是声明性的—您可以告诉Oracle(或任何其他RDBMS)您想要什么。但是执行计划最终决定了如何执行查询。因此,如果两个查询的计划相同,那么您可以放心,在性能上不会有任何差异。就RDBMS而言,这两个查询都将执行同上的操作


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

将哪些DBMS添加到标记中。它将帮助您让特定的DB用户更快地注意到您的问题。为了回答您的问题,几乎总是需要这些信息