データ モデルの一部として作成した T-SQL ビューを使用する ASP.NET MVC アプリケーションがあります。ビュー データを取り込むことはできますが、パフォーマンスが非常に低下しています。
SQL Server 2008 でビューを実行するSELECT *
と、187,101 行すべてを返すのに 20 分以上かかります。
ビューで a を実行するSELECT TOP 1000000
と、同じ 187,101 行が 2 秒で返されます。
そのため、ASP.NET MVC アプリケーションでパフォーマンスを向上させるためにステートメントをビュー デザインに含めましたTOP
が、結果を 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)
ビュー デザインのイメージを次に示します。