我试图通过好奇心获得更多关于此的背景信息。到目前为止,当我运行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周期,因为它做了一个嵌套循环。我是否在正确的轨道上?
答案 0 :(得分:4)
简单的答案是你在这里做了两件不同的事情。在您的第一个示例中,您将检索2个单独的实体。在第二个示例中,您要求RDBMS将2个实体组合(加入)到单个结果集中。
join
是RDBMS最强大的功能之一 - 它会(通常)尽可能高效地执行它 - 但这并不是说它是免费或廉价的。
答案 1 :(得分:0)
SELECT * FROM sometable
必须扫描整个表格。
如果任一表上的ChargeCodeGroupID
列都有索引,则INNER JOIN仅扫描索引会快得多。 (以他们的名字,我猜有)。当然,如果ChargeCodeGroupID
列中没有索引,则第二个查询比第一个查询慢。