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

SQL Server中ROW_NUMBER OVER语句的性能优化咨询

SQL视图性能优化建议请求

我正在解决一个性能问题,需要优化一个处理数十万行数据的视图运行速度,以下是剔除无关上下文并补充数据类型后的SQL代码:

SELECT 
    i.*, 
    gci.String1, gci.String2, gci.String3,
    v.String4, v.Guid1
FROM 
    (SELECT 
         c.*, t.Bit1, t.Guid2,
         ROW_NUMBER() OVER (PARTITION BY t.Guid2, t.Guid1, c.String5 ORDER BY t.Weight DESC) [Rank]
     FROM 
         Table5 c
     INNER JOIN
         Table4 t ON c.Guid3 = t.Guid3 
                  AND c.Int1 = t.Int1 
                  AND ((t.String6 = c.String6) OR
                       (t.String7 = c.String7) OR
                       (t.String6 IS NULL AND t.String7 IS NULL))) i
INNER JOIN
    Table3 vf ON i.Guid3 = vf.Guid3
INNER JOIN
    Table2 v ON vf.Guid1 = v.Guid1
LEFT JOIN
    Table1 gci ON i.String5 = gci.String5 
               AND v.Guid1 = gci.Guid1
WHERE
    i.[Rank] = 1

我的初步想法是将String5替换为新增列Int2,让OVER子句按int类型而非nvarchar类型分组,以此提升性能。

目前已为相关列创建了单独索引:
Table1

  • Guid1, String5(非聚集双列主键)
    Table2
  • Guid1(非聚集主键)
    Table3
  • Guid1(索引),Guid3(非聚集主键)
    Table4
  • Guid1(索引),Guid2(索引),Guid3(索引),Int1(索引),String6(索引),String7(索引)
    Table5
  • Guid3(索引),Int1(索引),String6(索引),String7(索引),String5(索引)

Table5是数据量最大的表,与其他相对较小的表关联后,数据量会随Table4等表的行数放大。

求无需大幅改动数据库结构的优化思路或建议。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:13:19