SOを検索しているときに、矛盾する2つの回答(およびそれを述べたコメントでさえ)を見つけましたが、決定的な回答はありませんでした:
問題は、TEXT/BLOB フィールドをテーブルの外に格納すると、パフォーマンス上の利点があるかどうかです。
次のように仮定します。
- 正しく SELECT します (必要に応じて TEXT/BLOB のみを選択し、SELECT * は使用しません)。
- テーブルは適切にインデックス付けされ、意味があります (したがって、「インデックス付けするかどうか」は問題ではありません)。
- データベースの設計は重要ではありません。これは、特定のデータベース設計の問題を解決するためではなく、この特殊なケースでの MySQL の動作を特定するための質問です。このデータベースにはテーブルが 1 つしかないとします (TEXT/BLOB が分離されている場合は 2 つ)。
- 使用エンジン: innoDB (異なる結果を取得する場合は、他のものも興味深いでしょう)
この投稿では、TEXT/BLOB を別のテーブルに配置することは、既に間違った方法で SELECT を行っている場合にのみ役立つ (必要でない場合でも常に TEXT/BLOB を SELECT する) 場合にのみ役立つと述べています。とにかくTEXT / BLOBは別々に保存されるため、同じテーブルが基本的により良い解決策です(複雑さが少なく、パフォーマンスが低下しないなど)
TEXT 列を別のテーブルに移動することでメリットが得られるのは、通常、テーブルからすべての列を選択する傾向がある場合のみです。これは、最初の悪い習慣を補うために 2 つ目の悪い習慣を導入しているだけです。言うまでもなく、2 つの間違いは 3 つの左と同じではありません。
ただし、この投稿には次のように記載されています。
テーブルに TEXT 列または BLOB 列がある場合、テーブルをメモリに格納できません
これは、テーブル内に TEXT/BLOB を配置するだけで、パフォーマンスが低下するということでしょうか?
私の質問は基本的に次のとおりです。正しい答えは何ですか?
TEXT/BLOB を別のテーブルに格納することは本当に重要ですSELECT
か?
または、テーブル内に TEXT/BLOB を配置しても、潜在的なパフォーマンス ヒットが発生しますか?