内连接与单独的语句

时间:2014-05-08 15:53:18

标签: sql sql-server sql-server-2008 join database-performance

我试图通过好奇心获得更多关于此的背景信息。到目前为止,当我运行2个单独的sql语句时,我在SQL事件探查器中发现,与使用脚本和使用内部连接相比,我没有CPU周期,读取次数少,持续时间也少。这是一个典型案例,我正在寻求帮助以更好地理解这一点。

简单示例:

SELECT *  FROM dbo.ChargeCode 

SELECT *  FROM dbo.ChargeCodeGroup

VS

SELECT *  
FROM dbo.ChargeCode c 
INNER JOIN dbo.ChargeCodeGroup cc ON c.ChargeCodeGroupID = cc.ChargeCodeGroupID

据我所知,内连接需要额外的CPU周期,因为它做了一个嵌套循环。我是否在正确的轨道上?

2 个答案:

答案 0 :(得分:4)

简单的答案是你在这里做了两件不同的事情。在您的第一个示例中,您将检索2个单独的实体。在第二个示例中,您要求RDBMS将2个实体组合(加入)到单个结果集中。

join是RDBMS最强大的功能之一 - 它会(通常)尽可能高效地执行它 - 但这并不是说它是免费或廉价的。

答案 1 :(得分:0)

SELECT * FROM sometable

必须扫描整个表格。 如果任一表上的ChargeCodeGroupID列都有索引,则INNER JOIN仅扫描索引会快得多。 (以他们的名字,我猜有)。当然,如果ChargeCodeGroupID列中没有索引,则第二个查询比第一个查询慢。