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
相关产品推荐
相关产品推荐

