MSSQL と MSSQL Server Management Studio を使用して、いくつかの結合といくつかのサブクエリを含むかなり複雑なクエリを作成しました。
選択される 1 つのプロパティは、Duration という名前の decimal(19,5) です。NHibernate の Queryover を使用して SelectSubQuery でこの列を取得すると、何らかの理由でオブジェクトをハイドレートするのに約 2 分かかります。クエリはほんの数ミリ秒です。
インデックスを手動で追加し、[インデックスを右クリック] -> [インデックスを追加] を (Id, Duration) で実行すると、クエリがわずかに速くなり、ハイドレーションは許容範囲内で、完璧ではありませんが、十分です。ただし、インデックスを右クリック -> [スクリプト インデックス] を選択し、作成したスクリプトを実行しても、クエリのパフォーマンスは向上しません。
Script Index As
作成します
CREATE NONCLUSTERED INDEX [idx_Duration] ON [Table]
(
[Id] ASC,
[Duration] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
つまり、手動で作成されたインデックスはパフォーマンスを向上させますが、スクリプト化されたインデックスはパフォーマンスを向上させません。