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

Azure DB DTU占满触发超时 如何重构优化现有存储过程SQL语句

存储过程优化建议
  • 修复变量声明笔误:原代码中第二个COUNT查询赋值的变量为@trialing,但预先声明的是@secondValue,存在未声明变量的语法问题,会导致执行异常。
  • 合并两次独立查询为单次条件聚合查询,避免两次扫描全表,减少一半的IO开销:
    原代码的两个查询过滤条件仅Type字段取值不同,其余过滤条件完全一致,可以用CASE WHEN在同一次表扫描中完成两个计数的统计,优化后的SQL如下:
    DECLARE @value BIGINT
    DECLARE @secondValue BIGINT 
    
    SELECT 
      @value = COUNT(CASE WHEN [Type] = 'paid' THEN 1 END),
      @secondValue = COUNT(CASE WHEN [Type] = 'avalue' THEN 1 END)
    FROM [dbo].[myTable]
    WHERE [Name] = 'something' 
      AND profilestatus = 'something'
      AND ExpiresOn >= CURRENT_TIMESTAMP
      AND [Type] IN ('paid','avalue') -- 提前过滤仅需要的Type值,减少数据处理量
    
    SELECT @value as firstValue, @secondValue as secondValue
    
  • 新增覆盖索引消除全表扫描,完全命中索引即可返回结果,大幅降低DTU占用:
    针对查询的过滤字段和统计逻辑,创建如下非聚集索引,不需要回表查询聚簇索引即可完成计数:
    CREATE NONCLUSTERED INDEX IX_myTable_Name_ProfileStatus_Type_ExpiresOn 
    ON dbo.myTable ([Name], profilestatus, [Type], ExpiresOn)
    
    索引顺序说明:等值匹配的Name、profilestatus放在最前面,随后放同样是等值过滤的Type,最后放范围匹配的ExpiresOn,符合索引最左匹配原则,查询效率最高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:51:02