You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化存储过程dbo.sproc_GetCountByUserId 移除临时表实现相同功能

存储过程优化方案(无临时表、原有统计逻辑100%保留)

优化核心思路:将原存储过程中两次临时表的中转逻辑,直接合并为关联查询+单次聚合,完全消除临时表开销,同时所有统计判定规则和原逻辑完全一致。

优化后完整代码

CREATE OR ALTER PROCEDURE dbo.sproc_GetCountByUserId
(
   @UserID INT
)
AS
DECLARE @MaxDate SMALLDATETIME = DATEADD(hh, - 36, GETUTCDATE());

SELECT
    SUM(CASE WHEN (usr.UserID = gc.UserID AND usr.DateUTC <= @MaxDate) = 0 THEN 1 ELSE 0 END) New,
    SUM(CASE WHEN (usr.UserID = gc.UserID AND usr.DateUTC <= @MaxDate) = 0 
              AND (usr.lCustomerID = gc.CustomerID AND usr.CustomerTypeID = 4) = 0 THEN 1 ELSE 0 END) Expired,
    SUM(CASE WHEN (usr.lCustomerID = gc.CustomerID AND usr.CustomerTypeID = 4) = 1 THEN 1 ELSE 0 END) Valid
FROM
    dbo.UsersTable usr WITH (NOLOCK, NOEXPAND)
INNER JOIN 
    dbo.Customer gc WITH (NOLOCK) 
    ON gc.CustomerID = usr.CustomerID AND gc.UserID = @UserID
WHERE
    usr.UserID = @UserID
    AND usr.CustomerTypeID IN (1,2,4,5,6,7,8,9,10);

逻辑一致性说明

  • 原临时表#users的过滤条件直接挪到最终查询的WHERE子句,过滤范围完全一致
  • 原HasTask、HasReply的判定逻辑直接内嵌到聚合的CASE语句中,判定规则和原逻辑完全相同
  • 关联条件和原逻辑完全一致,没有增减数据范围

内容的提问来源于stack exchange,提问作者Chatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:48:03