出于好奇,我正试图获得更多关于这方面的背景信息。到目前为止,当我运行2个独立的sql语句时,我发现在sql Profiler中,我没有CPU周期,更少的读取和更少的持续时间,而不是采取脚本并使用内连接。这是一个典型的案例吗?我正在寻求帮助来更好地理解这个问题。
简单的例子:
SELECT * FROM dbo.ChargeCode
SELECT * FROM dbo.ChargeCodeGroup
和
SELECT *
FROM dbo.ChargeCode c
INNER JOIN dbo.ChargeCodeGroup cc ON c.ChargeCodeGroupID = cc.ChargeCodeGroupID
从我的猜测是内连接花费额外的CPU周期,因为它做一个嵌套循环。我的思路对吗?
简单的回答是,您在这里做了两件不同的事情。在你的第一个例子中,你正在检索2个独立的实体。在第二个示例中,您要求RDBMS将2个实体组合(连接)成单个结果集。
join
是RDBMS最强大的功能之一——它(通常)会尽可能高效地完成它——但这并不是说它是免费的或便宜的。
SELECT * FROM sometable
必须扫描整个表。如果两个表的ChargeCodeGroupID
列上都有索引,那么INNER JOIN只扫描索引会快得多。(根据名字,我猜有)。当然,如果两个ChargeCodeGroupID
列都没有索引,第二个查询比第一个查询慢。