SOトラフを探している間、私は2つの矛盾の答え(およびことを述べても、コメント)を発見しましたが、決定的な答え:TEXT/BLOBを同じテーブルに格納するかどうか
問題がある:任意のパフォーマンス上の利点があり、あなたはTEXT/BLOBフィールドを格納する場合テーブルの外に?
は、我々が想定しています
- あなたは正しく選択(必要な場合にのみ選択にTEXT/BLOBを、全くSELECT *)
- テーブルは、それが(それが "の問題ではないのです理にかなっている場合は、適切にインデックス化されていませんあなたがそれをインデックス化した場合 ')
- データベースデザインは本当に重要ではありません。これは、特定のデータベース設計上の問題を解決するのではなく、この特殊なケースにおけるMySQLの動作を特定するための質問です。 (TEXT/BLOBが離れてしまった場合、または2)のは、このデータベースが1つのテーブルのみを有する
- 使用されるエンジンを想定してみましょう:InnoDBの
これを(彼らは異なる結果をフェッチする場合は他の人が、あまりにも興味深いものになるだろう) TEXT/BLOBを別のテーブルに入れることは、間違った方法で選択している場合にのみ役に立ちます(必ずしもTEXT/BLOBを選択する必要はありません) - は基本的にTEXT/BLOBをとにかくTEXT/BLOBがセブレートに格納されるため、同じテーブルは基本的には(複雑さが少なく、パフォーマンスが低下しないなど)の良いソリューションです
TEXT列を別の表に移動すると、通常、表からすべての列を選択する傾向がある場合にのみ利点があります。これは単に最初のものを補うための第2の悪い習慣を導入するだけです。 2つの間違いが3つの左と同じではないことは言うまでもない。
MySQL Table with TEXT columnこのポストはしかし、と述べている:表は、TEXT、またはBLOB列を有する場合
、テーブルをメモリに格納することができない
これは、パフォーマンスヒットを得るために、テーブルの中にTEXT/BLOBを持つだけで十分であることを意味しますか?
私の質問は基本的には次のとおりです。正解は何ですか?
SELECT
の場合は、別のテーブルにTEXT/BLOBを保存すると本当に問題になりますか?
テーブル内にTEXT/BLOBがあっても、パフォーマンスが低下する可能性がありますか?
使用している特定のストレージエンジンはありますか? InnoDB/MyISAM/NDBなど – gertvdijk
@gertvdijk私はそれを追加しました - 特にInnoDBに関するソリューションに興味がありますが、基本的には違いがあればMyISAMなどのストレージエンジンも面白いでしょう – Katai