1

いくつかのストアドプロシージャを調整しようとしていますが、インデックスについて質問があります。私はチューニングアドバイザーを使用しましたが、両方とも同じテーブルに対して2つのインデックスを推奨しました。問題は、1つのインデックスが1つの列用で、もう1つが複数の列用であり、最初から同じ列が含まれていることです。私の質問は、なぜ、そして何が違うのかということです。

CREATE NONCLUSTERED INDEX [_dta_index_Table1_5_2079723603__K23_K17_K13_K12_K2_K10_K22_K14_K19_K20_K9_K11_5_6_7_15_18]
ON [dbo].[Table1]  (    
    [EfctvEndDate] ASC,     
    [StuLangCodeKey] ASC,
    [StuBirCntryCodeKey] ASC,
    [StuBirStOrProvncCodeKey] ASC,
    [StuKey] ASC, 
    [GndrCodeKey] ASC,
    [EfctvStartDate] ASC,
    [StuHspncEnctyIndctr] ASC,
    [StuEnctyMsngIndctr] ASC,
    [StuRaceMsngIndctr] ASC,
    [StuBirDate] ASC,   
    [StuBirCityName] ASC 
) INCLUDE (
    [StuFstNameLgl],
    [StuLastOrSrnmLgl], 
    [StuMdlNameLgl],
    [StuIneligSnorImgrntIndctr],
    [StuExpctdGrdtngClYear]
) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) 
ON [PRIMARY] go

CREATE NONCLUSTERED INDEX [_dta_index_Table1_5_2079723603__K23]
ON [dbo].[Table1]  (
    [EfctvEndDate] ASC 
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF)     
ON [PRIMARY]
4

2 に答える 2

2

「スタンドアロン」のEfctvEndDateインデックスは、他のインデックスで機能的に利用可能ですが、はるかに小さく、したがってより効率的です(必要な読み取り数、キャッシュ機能、キャッシュ内に留まるなど)。 )。

もちろん、これは使用パターンなどに大きく依存しますが、一般的に、複数の、明らかに冗長なインデックスを持つことは、機密性の高いアプローチである可能性が非常に高くなります。

インデックスの「重複」の欠点は、主に(そしておそらく影響が大きいものから小さいものの順に)次のとおりです。

  • 基になるテーブルに対するINSERT/UPDATE / DELETEクエリでは、追加のインデックスを維持するためにパフォーマンスのオーバーヘッドが発生します。
  • キャッシュ使用量の競争
  • [ごくわずかに]クエリプランの作成に時間がかかります。
  • ストレージのオーバーヘッド(通常は問題ありませんが、バックアップ時間が長くなります...)。

したがって、追加のインデックスの恩恵を受ける可能性のあるSELECTクエリによるパフォーマンスの向上が、上記の欠点を相殺するかどうかを見積もる必要があります。データベースのパフォーマンスの調整は、通常、ケースバイケースの演習です...

于 2010-03-08T23:53:14.847 に答える
2

上記の場合のように、単一の列が複数列インデックスで定義された最初の列である場合:常に正しくなるとは限りません。または、クエリのワークロードが時間の経過とともに変化しました。複数列インデックスが有益であり、使用されている場合は、単一列インデックスを削除できます。ただし、プロファイルを作成し、インデックスの使用状況レポートを確認してください。

そうでない場合は、さまざまなクエリに適用できます。私が気づいたことの 1 つは、DTA が好んで行うことの 1 つは、特にクエリのワークロードが ORM によって放出される状況で、本質的にテーブル全体のコピーであるインデックスを作成することです。

このケースや他のすべてのケースと同様に、プロファイルを作成して、「通常の」クエリ ワークロードに対するインデックスの有効性を判断することが重要です。

于 2010-03-08T23:55:27.457 に答える