具体的な例を次に示します。
Wordpressは、ユーザー情報(meta)をwp_usermetaというテーブルに格納します。このテーブルで、meta_keyフィールド(例:first_name)とmeta_value(John)を取得します。
ただし、50人ほどのユーザーがいる場合にのみ、テーブルにはすでに約1219レコードがパックされています。
だから、私の質問は:大規模で、パフォーマンスの観点から、すべてのメタをフィールドとして持つテーブル、またはWordPressのようなテーブルがすべてのメタを行として持つ方が良いでしょうか?
どちらの場合も、インデックスは適切に設定されています。新しいメタを追加する必要はほとんどありません。wp_usermetaのようなテーブルは、入力可能なあらゆるタイプのデータに対応するために、テキスト/ロングテキストフィールドタイプ(大きなフットプリント)を使用する必要があることに注意してください。
私の仮定では、WordPressのアプローチは、ユーザーが何を必要としているかわからない場合にのみ有効です。さもないと:
- フィールドは単一の行に格納されないため、すべてのメタを取得するには、より多くのI/Oが必要です。フィールドは最適化されていません。
- 大きな欠点(部分インデックスでない限り、ロングテキストのインデックスを作成します...しかし、どのくらいの期間ですか?)に悩まされることなく、meta_valueフィールドにインデックスを作成することはできません。
- すぐに、データベースは多くの行で乱雑になり、最も正確なメタについても研究を罵倒します
- 開発者向けはありません。必要なものをすべて取得して適切に表示するために、実際に参加リクエストを行うことはできません。
しかし、私はポイントを逃しているかもしれません。私はデータベースエンジニアではなく、SQLの基本しか知りません。