問題を簡潔にモデル化する設計は、常に良いスタートです。データモデルを過度に一般化すると、パフォーマンスの問題が発生する可能性があります。たとえば、RDBMSをばかげた「名前/値」ストアとして使用する超柔軟性を追求するプロジェクトの報告を聞いたことがあります。その結果、パフォーマンスは驚くべきものでした。
優れた設計が整ったら、RDBMSが提供するツールを使用して、優れたパフォーマンスを実現します。単一フィールドPK(コンポジットなし)、ただし、一意の制約を持つインデックスとしてのコンポジットビジネスキー、適切なデータ型の使用。たとえば、charなどではなく数値に適切な数値型を使用します。RDBMSが実行されているハードウェアの物理的属性も考慮する必要があります。これは、クエリ時間の大部分がディスクI / Oであることが多いためですが、もちろんこれを当然のこととは考えないでください。プロファイラーを使用して、時間がどこに向かっているのかを調べてください。 。
更新/クエリの比率によっては、マテリアライズドビュー/インデックス付きビューは、実行速度の遅いクエリのパフォーマンスを向上させるのに役立ちます。貧乏人の代替手段は、トリガーを使用して、実行が遅く、頻繁に変更されないビューの結果をテーブルに取り込むプロシージャを呼び出すことです。
クエリの最適化はデータベースに依存することが多いため、少しブラックアートですが、ここではいくつかの経験則を示します-SQLの最適化。
最後に、質問の意図した範囲外である可能性がありますが、アプリケーションで優れたデータアクセス層を使用し、独自のデータアクセス層を使用する誘惑を避けてください。すべての主要言語で確実にテストされたパフォーマンスの高い実装が利用可能です。データアクセス層、中間層、およびアプリケーション層でキャッシュを使用すると、パフォーマンスを大幅に向上させることができます。