以下一组查询大约需要 15ms 才能完成,这对我来说太长了,所以我想对其进行优化。
INSERT INTO @tabl (Id)
SELECT [Value]
FROM dbo.Split(@Ids,',');
SET @Count = (SELECT COUNT(1) FROM tblOther WHERE Id IN (SELECT Id FROM @tabl));
基本上,它将 的值(@Ids
逗号分隔的列表)拆分,并将其放入表变量中。Id
然后它在另一个表中搜索此列表中带有 的任何记录Ids
。这对我来说似乎效率很低,我认为 anINNER JOIN
可以完成同样的事情。
INSERT INTO @tabl (Id)
SELECT [Value] FROM dbo.Split(@Ids,',');
SET @Count = (SELECT COUNT(1)
FROM tblOther AS t
INNER JOIN @tabl AS s ON s.Id = t.Id)
在两组查询中,我得到相同的结果,但我想知道这是否只是因为我的数据,或者是因为它们在功能上是等效的。
使用 的INNER JOIN
完成速度比使用IN
. 我认为这是因为IN
对每一行进行了检查。
问题
- 这两组查询在功能上是否等效,函数要返回所有具有
Id
in 的行@tabl
? - 有没有我没有考虑过的更快的替代方案?