1

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

つまり、手動で作成されたインデックスはパフォーマンスを向上させますが、スクリプト化されたインデックスはパフォーマンスを向上させません。

4

1 に答える 1

0

デザイナーを使用してインデックスを作成するとき、またはオブジェクトを右クリックしてスクリプトを作成するときに、Management studio の同じコードを使用して SQL を生成します。(どちらも SMO - Sql Management Objects ライブラリを使用します)。Profiler を使用して SSMS が生成する SQL ステートメントをキャプチャすることで、それらが同一であることを確認できます。

于 2013-01-30T06:45:18.533 に答える