web-dev-qa-db-ja.com

インデックスをパーティションに配置しないことには利点がありますか?

大規模なパーティション分割されたOLAPテーブルを管理する特権があります。このテーブルを確認していると、インデックスの1つがパーティション分割スキームと一致していないことに気付きました。有用な結果は返されていません。これが意図的なものか偶発的なものかはわかりません。

SQL Server 2008でインデックスをパーティションアラインしない理由はありますか?

9
Robin

パーティション化されたベースオブジェクトで(一意でない)インデックスをパーティション化しない主な利点は、MINなどの順序付けされたデータリクエストに関連する 長年のクエリオプティマイザーの制限 を回避できることです。 、MAX、またはTOP (n)クエリ。

パーティションインデックスでは、オプティマイザは通常、MINMAX、またはTOP (n)をパーティションごとに同じ操作に変換できません、続いて、パーティションごとの部分的な集計に対する最終的なグローバルな集計。オプティマイザは代わりに、インデックスのすべてのパーティションをスキャンする実行プランを選択します。これの例外は、集計または最上位の操作がパーティション列に対して指定されている単一のケースです。

また、非常に 正当な理由 があり、アラインされていないインデックスがないことにも言及します。非境界整列インデックスを使用することを選択することは、非常に情報に基づいた選択でなければなりません。私は過去に(まれに)自分でそれを行いましたが、利益が明らかにコストを上回るか、他の合理的な代替手段がなかった非常に特殊な状況で。


Itzik Ben-Ganによる記事 問題の説明。

11
Paul White 9

一部の制約(例:一意)に関連する明らかな問題があり、非整列インデックスが必要です

それ以外は、非整列のインデックスはbigコスト(主に、多くの並列演算子がパーティションごとにスレッドを実行することを防ぎ、代替はメモリの負荷が高くなります)があるため、そのようなインデックスは使用しないことを強くお勧めします。 Paulによってリストされたケースがあったとしても、私はまだ非整列索引に対して助言します。

3
Remus Rusanu

非整列インデックスは、パーティションの切り替えであるパー​​ティション分割の主な利点を打ち消します。これに依存せず、他の理由(異なるストレージ、読み取り専用パーティション、増分統計など)でパーティション分割している場合は、調整されていないindexexを作成してください。

非整列インデックスは、テーブル全体に一意の制約を適用できるため便利です。また、非境界整列索引では、パーティション化キーを暗黙のシーク接頭辞にする必要はありません。 10000のパーティションがあり、パーティションキーに基づいていないクエリを想像してください。実行プランは、インデックスが調整された場合、10000のパーティションにシークする必要があります。他の回答には、さらに例があります。

2
usr