web-dev-qa-db-ja.com

テーブルの分割と将来の値

約14億行のテーブルがあります。現在は1つのパーティションのみですが、データを複数のパーティションに分割したいと思います。これまでパーティションを使用したことがないので、ベストプラクティスがどれほどかはわかりません。

この表には、お客様の毎月の財務情報が含まれており、毎月約3,500万行が増えると増加します。各行には、YearMonth_IdとCustomer_Idのほか、財務情報を含む多くの列があります。

YearMonth_Idで分割することを考えています(おそらく四半期ごとにグループ化されていますか?)。

私はdbaではなく、単なる財務アナリストです。しかし、このテーブルを定期的に維持する資格のあるdbaがいないため、それを行うのは私次第です。したがって、私はテーブルの保守をできるだけ少なくしたいと考えています。

したがって、私の質問は次のとおりです。パーティションと増分値(YearMonth_Id)を使用する場合、テーブルのパーティションをどのように構成すればよいですか?私は通常、毎月(または四半期)に分割できる空のパーティションを右端(左の範囲で作業している場合)に残しておくと読みました。しかし、私は将来の値のために12個の空のパーティションを作成することを考えているので、次に分割を行う必要があるのは数年後になるでしょう。テーブルが毎月私に依存しないように。

これは大きなノーノーですか、それとも大丈夫ですか?

簡単な質問にたどり着くまでに長い時間がかかることは承知していますが、それが私の目的をよりよく理解してくれることを願っています。

SQL Server 2014を実行しています。

3
ssn

空のパーティションがクエリのパフォーマンスに及ぼす影響はごくわずかなので、1か月に1つずつ、最大12個の空のパーティションがあっても問題にはなりません。

とはいえ、パーティションの作成を自動化することもできます。詳細は this answer を参照してください。つまり、空のパーティションが1つしかないため、空のパーティションが多すぎることによるパフォーマンスへの影響が心配されることはありません。

テーブルのパーティション分割は、パフォーマンスを向上させるための万能薬ではなく、パーティション分割されていないテーブルよりもパフォーマンスが低下する可能性があります。パーティショニングの主な使用例は、ALTER TABLE ... SWITCH構文を使用して、古いデータを簡単にスワップアウトし、新しいデータをスワップインできるようにすることです。 この回答 は、データ管理を容易にするためにALTER TABLE ... SWITCHを使用する利点を示しています。

パーティション化によってパフォーマンスを向上させるには、パーティション化されたテーブルに対するクエリでパーティション化キーを使用する必要があります。 WHERE句またはJOIN句でパーティション化キーを使用しないクエリは、すべてのパーティションを検査する必要があります選択基準に一致する行の場合。

1
Max Vernon