我试图了解以下两个存储过程之间的性能逻辑。假设我有一个存储过程,它根据名为@user 的变量对来自三个不同表的行进行计数。是在每个表选择上过滤输出还是只在“父”选择上过滤一次更好。
存储过程 1
CREATE PROCEDURE [dbo].[myProcedure1]
@user NVARCHAR(150),
@postCount int out
AS
BEGIN
SELECT @postCount = COUNT(unionPostCount.IDpost)
FROM (
SELECT IDpost FROM Table1 WHERE Table1.IDuser = @user
UNION ALL SELECT IDpost FROM Table2 WHERE Table2.IDuser = @user
UNION ALL SELECT IDpost Table3 WHERE Table3.IDuser = @user
)
AS unionPostCount
END
存储过程 2
CREATE PROCEDURE [dbo].[myProcedure2]
@user NVARCHAR(150),
@postCount int out
AS
BEGIN
SELECT @postCount = COUNT(unionPostCount.IDpost)
FROM (
SELECT IDpost FROM Table1
UNION ALL SELECT IDpost FROM Table2
UNION ALL SELECT IDpost Table3
)
AS unionPostCount WHERE unionPostCount.IDuser = @user
END
我有一种感觉,对于非常大的表,程序 2 速度较慢,因为它必须从三个表中选择所有行,然后过滤它们,但我可能是错的。这两个过程中哪个在性能上更快?所有的帮助都得到了很好的赞赏。
最佳答案
我改变了答案,因为维克托确实是对的。计划是相同的。
我仍然认为 3 个计数操作应该更快,具体取决于检索到的数据的大小,认为花费最多的时间是在所有解决方案中查找行。所以我想所有解决方案在性能方面都很接近。
关于sql - 在每个联合表选择中过滤行还是只在父选择上过滤一次更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32112902/