1

我有一个 ASP.NET MVC 应用程序,它使用我创建的 T-SQL 视图作为其数据模型的一部分。我能够提取视图数据,但性能很差。

如果我SELECT *在 SQL Server 2008 中对视图执行操作,则需要 20 多分钟才能返回所有 187,101 行。

如果我SELECT TOP 1000000在视图上执行操作,我会在 2 秒内返回相同的 187,101 行。

因此,我TOP在视图设计中包含了该语句,以尝试在 ASP.NET MVC 应用程序中获得更好的性能,但在 WebGrid 中加载结果仍然需要大约 6 秒。

显然,我的视图设计中有一些东西会影响性能,但我不知道如何解决它。我阅读了有关聚集索引视图的信息,但我无法架构绑定视图,因为需要能够修改表。

这是SELECT我用来创建视图的语句:

SELECT TRD.Description AS Pbm,
       MV.ExtractHistoryMemberValueId,
       MV.FieldDescription,
       MV.FieldValue,
       HM.ExtractHistoryMemberId,
       HM.CaseNum,
       HM.CertNum,
       HM.ClmtNum,
       HM.PlanNum,
       EH.ExtractHistoryId,
       EH.ExtractDate
FROM OutgoingAccumulators.ExtractHistoryMemberValues AS MV
    INNER JOIN OutgoingAccumulators.ExtractHistoryMembers AS HM
        ON (MV.ExtractHistoryMember = HM.ExtractHistoryMemberId)
    INNER JOIN OutgoingAccumulators.ExtractHistories AS EH
        ON (HM.ExtractHistory = EH.ExtractHistoryId)
    INNER JOIN OutgoingAccumulators.Extracts AS EX
        ON (EH.Extract = EX.ExtractId)
    INNER JOIN Accumulators.Interfaces AS INF
        ON (EX.Interface = INF.InterfaceId)
    INNER JOIN Accumulators.TradingPartners AS TRD
        ON (INF.TradingPartner = TRD.TradingPartnerId)

这是视图设计的图像:

看法

4

1 回答 1

1

我找到了解决方案。我向 ExtractHistoryMemberValues 表添加了一个非聚集索引,如下所示:

USE [ProcessingDB]
GO
CREATE NONCLUSTERED INDEX [IX_ExtractHistoryMember]
ON [OutgoingAccumulators].[ExtractHistoryMemberValues] ([ExtractHistoryMember])
INCLUDE ([ExtractHistoryMemberValueId],[FieldDescription],[FieldValue])
GO

该视图现在在 2 秒内返回所有行。

这是新的执行计划:http: //i.imgur.com/CiWkFT7.png

于 2013-05-29T14:20:49.653 回答