以下一组查询大约需要 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对每一行进行了检查。
问题
- 这两组查询在功能上是否等效,函数要返回所有具有
Idin 的行@tabl? - 有没有我没有考虑过的更快的替代方案?