大規模なパーティション分割されたOLAPテーブルを管理する特権があります。このテーブルを確認していると、インデックスの1つがパーティション分割スキームと一致していないことに気付きました。有用な結果は返されていません。これが意図的なものか偶発的なものかはわかりません。
SQL Server 2008でインデックスをパーティションアラインしない理由はありますか?
パーティション化されたベースオブジェクトで(一意でない)インデックスをパーティション化しない主な利点は、MIN
などの順序付けされたデータリクエストに関連する 長年のクエリオプティマイザーの制限 を回避できることです。 、MAX
、またはTOP (n)
クエリ。
パーティションインデックスでは、オプティマイザは通常、MIN
、MAX
、またはTOP (n)
をパーティションごとに同じ操作に変換できません、続いて、パーティションごとの部分的な集計に対する最終的なグローバルな集計。オプティマイザは代わりに、インデックスのすべてのパーティションをスキャンする実行プランを選択します。これの例外は、集計または最上位の操作がパーティション列に対して指定されている単一のケースです。
また、非常に 正当な理由 があり、アラインされていないインデックスがないことにも言及します。非境界整列インデックスを使用することを選択することは、非常に情報に基づいた選択でなければなりません。私は過去に(まれに)自分でそれを行いましたが、利益が明らかにコストを上回るか、他の合理的な代替手段がなかった非常に特殊な状況で。
Itzik Ben-Ganによる記事 問題の説明。
一部の制約(例:一意)に関連する明らかな問題があり、非整列インデックスが必要です。
それ以外は、非整列のインデックスはbigコスト(主に、多くの並列演算子がパーティションごとにスレッドを実行することを防ぎ、代替はメモリの負荷が高くなります)があるため、そのようなインデックスは使用しないことを強くお勧めします。 Paulによってリストされたケースがあったとしても、私はまだ非整列索引に対して助言します。
非整列インデックスは、パーティションの切り替えであるパーティション分割の主な利点を打ち消します。これに依存せず、他の理由(異なるストレージ、読み取り専用パーティション、増分統計など)でパーティション分割している場合は、調整されていないindexexを作成してください。
非整列インデックスは、テーブル全体に一意の制約を適用できるため便利です。また、非境界整列索引では、パーティション化キーを暗黙のシーク接頭辞にする必要はありません。 10000のパーティションがあり、パーティションキーに基づいていないクエリを想像してください。実行プランは、インデックスが調整された場合、10000のパーティションにシークする必要があります。他の回答には、さらに例があります。