3

私は数千万行のデータベーステーブルを扱っており(時間の経過とともに数億行になる可能性があります)、行数が増えてもパフォーマンスを安定させるためにデータベースパーティショニングを実装することを検討しています。これが私がやりたいことです:

動物を保管するテーブルがあるとしましょう。フィールドの1つは、AnimalType(つまり、Bird / Fish / Cat / Dog)です。クエリの99%は1つのAnimalTypeにのみ関連し、テーブルにはほぼ同じ量のAnimalType(つまり、1000匹の魚、1000羽の鳥、1000匹の犬)があるため、各AnimalTypeを個別のパーティションにします。パーティションは素晴らしく、均等に分散している必要があります。ただし、動物の種類はたくさんあるので、AnimalTypeごとに数百のパーティションを手動で作成したくないので、新しいAnimalTypeを入力するたびに、新しいパーティションを作成する必要があります。

したがって、私が望むのは、SQLServerにAnimalTypeに基づいてパーティションを作成するように指示する方法です。AnimalType用のパーティションがすでに存在する場合は、そのパーティションを使用します。存在しない場合、SQLServerは自動的に新しいパーティションを作成します。

簡単そうに聞こえますが、これを行う方法を見つけることができないようです。出来ますか?

あるいは、テーブルへのアクセス速度を素晴らしく高速に保つための他の方法は何ですか?古いレコードをHistoryスタイルのテーブルに移動するなど、手動でデータをより多くのテーブルに移動するだけのことは避けたいと思います。クエリで完全なデータセットのデータが必要になる可能性があるため、実際にはそうはなりません。ヘルプ。私はすでにいくつかの基本的なインデックスを持っており、これは非常に役立ちます。

4

2 に答える 2

3

パーティショニングは、ストレージの問題に対するソリューションです。フィールド値に基づいて、どのファイルグループデータが配置されているかを判断します。それ自体では、実際のパフォーマンス上の利点はありません。実際、新しいパーティションロケーション演算子を追加する必要があるため、ほとんどの場合、クエリの速度が低下します。1つのパーティションのみを考慮するようにクエリを強制する唯一の方法は$PARTITION構文であり、これは実際のアプリケーションシナリオでは使用できません。1つのパーティションのみを検索することを選択したクエリは、インデックス範囲のみに基づいて検索し、パーティションの有無にかかわらず、まったく同じ数のレコードをスキャンします。

パーティショニングにパフォーマンス上の利点があるのは、パーティションの切り替えやテーブルからの切り替え、一括インポート操作などの管理アクティビティの場合のみです。

パフォーマンス上の利点は、適切なインデックスと慎重に設計されたクエリからのみ得られます。

于 2009-10-28T05:33:47.200 に答える
1

これは非常に古い質問なので、更新された情報がおそらく適切です。まず、元の質問に答えるために、はい、動的パーティション化はスケジュールされたジョブによって可能です。

Marlon Ribunalの記事、動的パーティションのセクションを参照してください

SQLShackのJigneshRaiyaniによるSQLServerでのテーブルパーティショニングの自動化方法

また、パーティションによって特定のシナリオでクエリのパフォーマンスが向上することも追加したいと思います。私にとっては、クラスター化された列ストアインデックスを使用して、パーティション化を活用してセグメントの削除を促進することができました。2018年からのそれについてのSO投稿を参照してください:

パフォーマンスのための列ストアテーブルのパーティション化

パーティショニングスキームに軽く入ってはいけません。実装する前に設計を強化することが証明されるべきであるのは、余分な複雑さとオーバーヘッドです。

于 2021-04-01T18:40:57.223 に答える