web-dev-qa-db-ja.com

非正規化戦略:クエリを高速化するために冗長性を作成するのが適切なのはいつですか?

そのため、データベースが意図的に冗長な情報を追加してクエリを高速化するのを時々目にします。これが言及されているのを見ました ここ しかし、これがインデックス作成やビューの作成よりも優れているのはいつか疑問に思いました。それとも、それは決して良くないのでしょうか?

この冗長性を追加することでスケーリングの問題が確実に発生することは知っていますが、すぐに速度を上げるためにスケーラビリティを犠牲にする方が理想的な時期はありますか?

1
aug

非正規化はケースバイケースで行われているようです。効率を上げるためにテーブルを非正規化することにした場合は、クエリを徹底的にテストしていることを確認してください。 @PieterGeerkensが言及しているように

one特定のクエリの目的で作成されたすべての冗長性は他のすべてのを遅くします-)同じデータに対するクエリ、挿入、および更新。

これは非正規化ですが、一部のゲインが向上する可能性がありますが、他のクエリの速度だけでなく、スケーラビリティにも非常に大きなコストがかかります。パフォーマンスを向上させる他の方法とともに、これらすべてを考慮することが重要です。

要するに、私は本を書いたクリス・デイトからの引用でそれを終えます 深さのデータベース:開業医のための関係理論

完全に正規化された設計に満たないものは、強く禁忌であると固く信じています... [Y] ouは、最後の手段としてのみ「非正規化」する必要があります。つまり、パフォーマンスを向上させるための他のすべての戦略が何らかの理由で要件を満たしていない場合にのみ、完全に正規化された設計から撤退する必要があります。

拡張読書:

  1. スケーリングの秘密#2:スピードと利益への道を非正規化する
  2. データベース戦争ストーリー#3:Flickr
1
aug