素晴らしい挿入パフォーマンスを備えた10億行を少し超える時系列データのテーブルがありますが、(場合によっては)選択パフォーマンスがひどいです。
表tblTrendDetails
(PKは示されているように順序付けられています):
PK TrendTime datetime
PK CavityId int
PK TrendValueId int
TrendValue real
テーブルは継続的に新しいデータをプルし、古いデータをパージしているため、挿入と削除のパフォーマンスを維持する必要があります。
次のようなクエリを実行すると、パフォーマンスが低下します(30秒)。
SELECT *
FROM tblTrendDetails
WHERE TrendTime BETWEEN @inMinTime AND @inMaxTime
AND CavityId = @inCavityId
AND TrendValueId = @inTrendId
同じクエリを再度実行すると(同じ時間ですが、またはのいずれ@inCavityId
か@inTrendId
)、パフォーマンスは非常に良好です(1秒)。パフォーマンスカウンターは、クエリが最初に実行されたときにディスクアクセスが原因であることを示しています。
挿入または削除のパフォーマンスに(大幅に)悪影響を与えることなくパフォーマンスを向上させる方法に関する推奨事項はありますか?任意の提案(基盤となるデータベースの完全な変更を含む)を歓迎します。