重现步骤

[步骤]

---SKU供应商首次出现 -- 初始化变量 DECLARE @LastMaxID INT = 24310757; -- 上一次返回的ID DECLARE @MaxID INT; -- 设置@MaxID为最大的ID值 SELECT @MaxID = MAX(ID) FROM ( SELECT TOP 5000 pd.ID FROM RB_Procurement_Detail pd LEFT JOIN RB_Procurement_List pl ON pd.CustomerID = pl.CustomerID AND pd.P_Code = pl.P_Code WHERE ISNULL(pl.IsSample,0) = 0 AND pd.ID > @LastMaxID ORDER BY pd.ID ASC ) AS subquery; -- 更新RB_Procurement_Detail表,设置IsFirstSupplierOrder为1 UPDATE pd1 SET pd1.IsFirstSupplierOrder = 1 FROM RB_Procurement_Detail pd1 LEFT JOIN RB_Procurement_List pl ON pd1.CustomerID = pl.CustomerID AND pd1.P_Code = pl.P_Code WHERE pd1.CustomerID = 1 AND ISNULL(pl.IsSample,0) = 0 AND pd1.IsFirstSupplierOrder = 0 AND pd1.ID > @LastMaxID AND pd1.ID <= @MaxID AND ( ( pd1.ChangeSupplierID > 0 AND pd1.ChangeSupplierID <> (SELECT COALESCE(( SELECT TOP 1 CASE WHEN pd2.ChangeSupplierID > 0 THEN pd2.ChangeSupplierID ELSE pl2.SupplierID END AS SupplierID FROM RB_Procurement_Detail pd2 INNER JOIN RB_Procurement_List pl2 ON pd2.CustomerID = pl2.CustomerID AND pd2.P_Code = pl2.P_Code WHERE pd1.CustomerID = pd2.CustomerID AND ISNULL(pl2.IsSample,0) = 0 AND pd1.sku = pd2.sku AND pd1.ID > pd2.ID ORDER BY pd2.ID DESC ), 0) AS SupplierID) ) OR ( pd1.ChangeSupplierID = 0 AND pl.SupplierID <> (SELECT COALESCE(( SELECT TOP 1 CASE WHEN pd2.ChangeSupplierID > 0 THEN pd2.ChangeSupplierID ELSE pl2.SupplierID END AS SupplierID FROM RB_Procurement_Detail pd2 INNER JOIN RB_Procurement_List pl2 ON pd2.CustomerID = pl2.CustomerID AND pd2.P_Code = pl2.P_Code WHERE pd1.CustomerID = pd2.CustomerID AND ISNULL(pl2.IsSample,0) = 0 AND pd1.sku = pd2.sku AND pd1.ID > pd2.ID ORDER BY pd2.ID DESC ), 0) AS SupplierID) ) ) AND EXISTS ( SELECT TOP 1 CASE WHEN pd2.ChangeSupplierID > 0 THEN pd2.ChangeSupplierID ELSE pl2.SupplierID END AS SupplierID FROM RB_Procurement_Detail pd2 INNER JOIN RB_Procurement_List pl2 ON pd2.CustomerID = pl2.CustomerID AND pd2.P_Code = pl2.P_Code WHERE pd1.CustomerID = pd2.CustomerID AND ISNULL(pl2.IsSample,0) = 0 AND pd1.sku = pd2.sku AND pd1.ID > pd2.ID ORDER BY pd2.ID DESC ); -- 更新RB_Procurement_List表,设置IsFirstSupplierOrder为1 UPDATE pl SET pl.IsFirstSupplierOrder = 1 FROM RB_Procurement_List pl WHERE pl.CustomerID = 1 AND pl.IsFirstSupplierOrder = 0 AND EXISTS ( SELECT 1 FROM RB_Procurement_Detail pd WHERE pd.CustomerID = pl.CustomerID AND pd.P_Code = pl.P_Code AND pd.IsFirstSupplierOrder = 1 AND pd.ID > @LastMaxID AND pd.ID <= @MaxID ); -- 返回@MaxID SELECT @MaxID AS MaxID;


[结果]


[期望]

排查优化SQL 控制在1秒以内,或者剥离业务
历史记录  
  1. 2026-07-30 16:37:10, 由 袁慧斌 创建。
  2. 2026-07-30 16:38:01, 由 李乐同 指派给 何建宝。
    修改了 指派给,旧值为 "liletong",新值为 "hejianbao"。
  3. 2026-07-30 17:34:35, 由 何建宝 编辑。
    修改了 严重程度,旧值为 "1",新值为 "2"。
    修改了 解决时效,旧值为 "0",新值为 "-1"。
  4. 2026-07-30 17:36:21, 由 何建宝 解决,方案为 性能问题 。
    修改了 解决方案,旧值为 "",新值为 "performance"。
    修改了 解决版本,旧值为 "",新值为 "trunk"。
    修改了 解决日期,旧值为 "",新值为 "2026-07-30 17:34:56"。
    修改了 指派给 ,旧值为 "hejianbao",新值为 "yuanhuibin"。
    修改了 Bug状态 ,旧值为 "active",新值为 "resolved"。
    修改了 是否确认,旧值为 "0",新值为 "1"。
    修改了 解决者 ,旧值为 "",新值为 "hejianbao"。

    解决方案:使用CTE+窗口函数替代重复子查询,减少查询时间,已提交代码

  5. 2026-07-31 15:53:28, 由 陈莉珍 编辑。
    修改了 开发责任人,旧值为 "",新值为 "hejianbao"。
    修改了 测试责任人,旧值为 "",新值为 "hejianbao"。
    修改了 解决时效 ,旧值为 "0",新值为 "0.96"。
    修改了 上线时间 ,旧值为 "0000-00-00 00:00:00",新值为 "2026-07-30 17:34:56"。
    修改了 上线时效 ,旧值为 "-1",新值为 "0.96"。
  6. 2026-08-04 14:29:04, 由 袁慧斌 关闭。
    修改了 Bug状态 ,旧值为 "resolved",新值为 "closed"。
    修改了 指派给 ,旧值为 "yuanhuibin",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "yuanhuibin"。
    修改了 关闭日期,旧值为 "",新值为 "2026-08-04 14:29:04"。
所属项目 技术中心-需求池
所属模块 供应链   产品采购   采购
所属计划
所属迭代
Bug类型
严重程度 一般
优先级 P1
Bug状态 已关闭
业务部门 供应链管理中心
影响功能
开发责任人 何建宝
测试责任人 何建宝
解决时效 0.96
激活次数 0
激活日期
是否确认 是
当前指派 Closed 于 2026-08-04 14:29:04
截止日期 0000-00-00
上线时间 2026-07-30 17:34:56
上线时效 0.96
操作系统
浏览器
关键词
抄送给
所属迭代
相关需求
相关任务
由谁创建 袁慧斌 于 2026-07-30 16:37:10
影响环境 生产环境-业务反馈
由谁解决 何建宝 于 2026-07-30 17:34:56
解决版本 主干
解决方案 性能问题
由谁关闭 袁慧斌 于 2026-08-04 14:29:04
最后修改 袁慧斌 于 2026-08-04 14:29:04
相关Bug