質問: 現在、 NonFactors / MVC6-Gridを使用して、.NET Core 2.0およびMVCで構築されたかなり基本的なCRUDアプリケーションのインデックスページにデータを表示しています。いくつかのフィールドを持つモデルがあり、そのうちのいくつかは計算フィールドです。 MVCグリッドによる並べ替えとフィルタリングは、550,000を超えるレコードであっても、本当にうまく機能します。しかし、計算フィールドの1つをソートしてフィルタリングしようとすると、パフォーマンスが大幅に低下します(約45秒かかる)。これは世界の終わりではありませんが、計算フィールドのパフォーマンスを向上させる方法があるかどうかを知りたいと思いますか? 私は、パフォーマンスの低下は計算フィールドにインデックスの欠如、または各レコードの計算プロパティを再計算*した後、*濾過/ソートされていること、またはその両方が原因のいずれかであることをかなり確信しています。 誰かがボトルネックがどこにある可能性があるかについての洞察を持っている場合、私はパフォーマンスを高めることができる方法があれば、それは非常に感謝します。
回答: SQLドキュメントから * 計算列は、DEFAULTまたはFOREIGN KEY制約定義またはNOT NULL制約定義として使用することはできません。ただし、計算列の値が確定式で定義され、結果のデータ型がインデックス列で許可されている場合、計算列はインデックス内のキー列として、またはPRIMARY KEYまたはUNIQUE制約の一部として使用できます。たとえば、表に整数列aおよびbがある場合、計算列a + bは索引付けできますが、次の呼び出しで値が変更される可能性があるため、計算列a + DATEPART(dd、GETDATE())は索引付けできません。 だから、あなたはインデックスを設定することができるかもしれません...計算に依存します。 また、使用しているSQL Serverのバージョンによっては、列をPERSISTEDとしてマークすることもできます。 索引を使用したSQL Serverでのソートとフィルタリングは、前述のようにクライアント側よりもはるかに高速です