非正規化する前に、これが次のことにどのような影響を与えるのか疑問に思っています。
- クエリ応答時間
- データベースの行の幅
- 結果に必要な結合
- リクエストを完了するために必要なクエリの数
私が間違っていなければ、これらすべてが削減されるようですか?
非正規化する前に、これが次のことにどのような影響を与えるのか疑問に思っています。
私が間違っていなければ、これらすべてが削減されるようですか?
たまたま Microsoft SQL Server を使用している場合は、テーブルを正規化したままにして、非正規化のためにいわゆるインデックス付きビューを使用することを強くお勧めします。これらは、基になるテーブルが更新されるたびに更新される半永久的なデータ構造です。このようにして、正規化されたスキーマと高速な非正規化されたデータの両方の長所を維持できます。
Oracleにも同様のものが存在する可能性がありますが、確かではありません。
データベースの行の幅は増えませんか?
非正規化は、最後の手段の最適化としてのみ実行する必要があります。
データベースのサイズが大きくなり、データの重複も増え、データを最新の状態に保ち、同期することが難しくなります。
あなたの仮定は正しいです。非正規化によりパフォーマンスは向上しますが、欠点は正確性が低下することです。
このトピックは、この以前のスタックオーバーフローの質問で詳しく説明されています
「データベース内の行」を除いて、あなたの答えはすべて正しいです。
「非正規化」とは、厳密に必要な情報よりも多くの情報を連続して格納することを意味します。行幅を増やさないとそれは不可能です。
しかし、最も重要なことは、すべての質問をしたわけではないということです。
また、データベースに意図的に冗長性を導入する場合、データベースに破損したデータ (それ自体と矛盾するデータ) が含まれないようにするために、同時にいくつかの追加のデータベース制約を導入するべきではないかどうかも疑問に思います。
そして、その質問に対する答えが「はい」である場合、おそらく、冗長性を導入したために必要な追加の制約をすべて適用しても、同じような (またはより重大な) 損失が発生しないかどうかを自問する必要があります。パフォーマンスを更新します。
非正規化はかなり広い用語であるため、質問に対する簡単な答えはありません。
結合を避けている場合は、取得が高速になる可能性があります。ただし、更新とデータのメンテナンスが複雑になるため、トレードオフがあります。
クエリの数または速度がシステム全体で改善されるかどうかを尋ねているようですが、これもあまり意味がありません-アプリケーションの特定のボトルネックに対する特定のローカル最適化と考える方がよいでしょう、つまり、単一のクエリまたは一連のクエリをより高速に実行するために考慮すべきことです。