【要約】正規化はパフォーマンスの敵?非正規化との付き合い方を徹底解説 [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者がDB設計を行う際、正規化によるJOINの増加がパフォーマンスを低下させる懸念に直面する。具体的には以下の問題がある。
- ・正規化を徹底するとテーブル分割が進み、JOINが増加する。
- ・JOINの回数が増えることで、クエリ実行コストが上昇する。
- ・安易な非正規化は、更新負荷やデータ不整合を招くリスクがある。
// Approach
本記事は、正規化を原則としつつ、パフォーマンス限界に達した際の非正規化の判断基準を提示している。具体的には以下の手法を提案している。
- ・インデックスを適切に設計し、JOINのコストを最小化する。
- ・非正規化パターンAとして、関連カラムを保持しJOINを回避する。
- ・非正規化パターンBとして、集計値を保持しGROUP BYを回避する。
- ・読み取り頻度と更新頻度のバランスに基づき、非正規化を検討する。
// Result
エンジニアが、正規化と非正規化を使い分けるための明確な判断軸を得られる。具体的な成果は以下の通りである。
- ・インデックスがあれば、数テーブルのJOINは誤差レベルであると理解できる。
- ・非正規化のメリットと、更新コスト・不整合のリスクを評価できる。
- ・「正規化を優先し、非正規化は最後の手段とする」指針が確立される。
Senior Engineer Insight
> 実戦では、安易な非正規化は運用コストを劇的に増大させる。データの整合性をアプリケーション層で担保するコストは、DBの負荷軽減分を容易に上回る。まずは正規化とインデックス設計を徹底すべきだ。非正規化は、読み取りが圧倒的に多い場合に検討すべきである。更新が極めて限定的なワークロードが対象となる。