私はMySQLにデータベースERD connectionsを持っています。著者が記事を投稿できるシンプルなブログアプリケーションです。私は自分のデータベースを設計するベストプラクティスを知りたいと思います。私はpostとpost_bodyテーブルを持っていて、post_bodyにはたくさんのデータが入っている可能性があるので、それらを分けました。私は記事を一覧表示するために使用するので、この列はたった数回使用しますが、記事全体を表示するには投稿の名前をクリックする以外のコンテンツは表示されません。だから私はその分離がパフォーマンスにとって良いと思った。または私は間違っていると私はこれらのテーブルをマージする必要がありますか?パフォーマンスを節約するために大量のデータを別のテーブルに入れる必要があります
答えて
ほとんどのデータベースでは、列の位置は問題にはなりません。場合によっては、データタイプを介してデータ管理をヒントできます。 LARGE TEXT型はほとんどの場合テキスト索引付けされません(または部分的にのみ索引付けされます)。実際には別のファイルに格納されます。
あなたが説明した最適化は、RDBMSが理にかなっている場合には既に行われており、希望よりも効率的かつ透過的な方法で実行されます。非常に特殊な状況を除いて、それだけを残しておくほうが良いです。
実際に行う必要があるのは、行の場所の作業です。 MySQLでは、パーティション分割によって大きなテーブルに取り組むかもしれません。ただし、これを実行する前に、実行しているクエリを検討し、それに応じてインデックスを作成する必要があります。
高度な正規化(「more tables」)が良好で清潔な状況があります。これらの1対1のリレーションシップのいずれかが将来的に1対多または多対多になる可能性がある場合、マルチテーブル・データベースはより柔軟になります。たとえば、いくつかの顧客に複数のアドレスを格納する必要がある場合は、顧客テーブルとアドレステーブルを持つ方が簡単です。
私はこれを数回遭遇しました。考慮すべき事項がいくつかあります。
- 「メタ」データ(「ボディ」以外の列)をスキャンすることはよくありますが、「ボディ」は必要ありませんか?
- 適切に
INDEX
テーブルを取得できないため、必要な行を決定する前に追加のメタ列をフェッチしてチェックする必要がありますか?
どちらも「私は必要のないかさばる体に絡みついていますか? 「はい」の場合、「垂直パーティショニング」がになることをお勧めします。
ご使用の製品の導入が早い場合は、「KISS」をお勧めします。これは、必要と判断するまで垂直パーティションの複雑さを気にしないでください。
別の考慮事項は、
- では '体' である(またはそれが何であれ) "オプション"?つまり、多くの行にその列の値がありませんか? (これは「身体」を取得する際
LEFT JOIN
を行うにつながる。)
をあなたがそれを行うことを決定した場合...(あなたが使用するべきではありません)のMyISAMでは
CREATE TABLE main (
id ... PRIMARY KEY -- perhaps AUTO_INCREMENT
)
CREATE TABLE bulky_stuff(
id ... PRIMARY KEY -- not AUTO_INCREMENT, but value matches `main.id`
body MEDIUMTEXT NOT NULL ...
)
を、垂直分割をしばしば有用です。 InnoDBでは、通常、そのエンジンが大量のカラムを別々のブロックに置く方法があるため、あまり有用ではありません。ROW_FORMAT
をおそらくDYNAMIC
に変更すると、より良い(つまり、より単純な)解決策になる可能性があります。
- 1. 帯域幅を節約するためにモバイルサイトのCSS&JSをインライン化する必要がありますか?
- 2. REST - エンドポイントに要約データを含める必要がありますか?
- 3. mongoDbコレクションに埋め込まれたデータの量を表示する必要があります。
- 4. @finally節に[pool drain]を入れる必要がありますか?
- 5. 1つのテーブルに大量のデータがあり、他のテーブルに大量のデータがある場合にSQL Serverで2つのテーブルに結合する
- 6. 大きな値のデータ型を別のテーブルに格納する必要がありますか?
- 7. テーブルを別にしたり、データを統合したりする必要がありますか?
- 8. テーブルに集約して0の値をスキップする必要があります
- 9. はあなたが別のデバイスのために別のレイアウトを記述する必要がありますか?
- 10. はApiControllersのための規約を作成する必要があります
- 11. WCFデータ契約モデルにSQL入力パラメータを含める必要がありますか?
- 12. シミュレーション時間を節約するために、システムのVerilogジェネレータモジュールから生成されたパケットを破棄する必要がありますか?
- 13. ユーザーアクションによってデータが入力されたテーブルを知る必要があります
- 14. Firebaseのユーザサインアップのためにさらにデータを入力する必要があります
- 15. フラットな結果に階層データのためのSQLクエリを必要とするが、テーブルあります
- 16. 入力が必要なプログラムは、大文字と小文字を区別する必要があります。
- 17. O(1)の時間の複雑さを平均的に節約するために、キー全体をハッシュする必要がありますか?
- 18. 変数に制約エラーがある必要があります
- 19. メモリを節約するためにUIImageViewにUIImageを設定するときにUIImageのサイズを変更する必要はありますか?
- 20. データベース制約をビジネスロジックにマップする必要があります
- 21. SQL - 1つのテーブルのデータを1フィールドが別のフィールドに挿入する必要がある
- 22. テーブルにangularjsのデータを表示する必要があります
- 23. CQRSでデータを検索するために必要な集約ルートをどのように処理する必要がありますか
- 24. 挿入されるデータのタイミングを解読する必要があります
- 25. HTML divに完全に別のdivを含める必要があります
- 26. Oracle:あるテーブルから別のテーブルにデータをコピーし、コピー中にフォーマットする必要がある
- 27. 容量があまりにも多く予約されているC++ STLベクタは、大量のメモリを必要としますか?
- 28. SQLクエリのパフォーマンスを改善する必要があります
- 29. PHP MVC - モデルが別のモデルのデータにアクセスする必要があります
- 30. excelテーブルの列に式/データを入力するループが必要