SQL - アクセス頻度に応じて大きなテーブルを分割しますか? - sql、postgresql

50個のフィールドを持つテーブルがあります。

  1. ほとんど常に必要な10のフィールド。
  2. まれにしか必要とされない40のフィールド。

大まかに言うと、(1)のフィールドは(2)のフィールドよりも1000倍頻繁にアクセスする必要があります。

それらを1対1の関係で2つのテーブルに分割するか、すべてを同じテーブルに保持する必要がありますか?

回答:

回答№1は1

あなたが説明しているプロセスは時々「垂直分割」と呼ばれます。極端に言えば(垂直パーティションごとに1列)、これが列状データベースがデータを保存する方法です。残念ながら(私の知る限り)、Postgresは現在、垂直分割を直接サポートしていません。

データを2つのテーブルに分割するというアイデアは素晴らしいことです。次のことに注意してください。

  • 2番目のテーブルを使用するには、追加の列を使用するクエリを変更する必要があります。 (ラップできます join 余分な列が必要なときに使用するビューに)
  • 両方のテーブルに、それらを接続するクラスター化された主キーがある場合、 join 本当に速いはずです。
  • データを挿入/更新/削除する場合は、同期に注意する必要があります。これで対処できると思います INSTEAD OF テーブルを組み合わせたビューでトリガーします。
  • 一部のレコードに余分な列がない場合、これはスペース側で大きなメリットになる可能性があります。
  • すべてのレコードとすべての列がキャッシュにロードされる場合、これはおそらく大きな勝利ではありません。

状況によっては、これによりパフォーマンスが大幅に向上する可能性があります。ただし、テーブルの同期を維持するための追加の手作業があります。


回答№2の場合は0

ここには、推定するのに十分な情報がありません(実際には気にしないでください) 定量化する)利点は何でしょうか、しかしコストは非常に明確です-より複雑なコード、より複雑なスキーマ、おそらく全体的なスペース使用量の増加、および行の追加と削除時のパフォーマンスのオーバーヘッド。

パフォーマンスの向上は、scanning a smaller amount of data when performing a full table scan, or from an increased likelihood in finding data blocks in memory when required, and an overall smaller memory footprint, but without specific information on the types of operation commonly performed, and whether the server is under memory pressure, no reliable advice can be given.

不確実なパフォーマンス向上の副作用としてシステムをより複雑にすることに非常に注意してください。


関連する質問
メニュー
最も人気のある