gpt4 book ai didi

sql - 在每个联合表选择中过滤行还是只在父选择上过滤一次更有效

转载 作者:行者123 更新时间:2023-12-01 12:32:42 25 4
gpt4 key购买 nike

我试图了解以下两个存储过程之间的性能逻辑。假设我有一个存储过程,它根据名为@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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com