議論のために、MySQL テーブル内の非常に単純なファイルシステムを表現しようとしているとしましょう。これはまさに私がやっていることではないことに注意してください。質問の簡単な基礎になります。ですから、ファイルを保存するためのより良い方法を私に言わないでください。テーブルのスキーマは次のとおりです。
varchar path
varchar filename
blob content
上記のスキーマの問題点は、クエリが必ずしもコンテンツ フィールドを必要としない場合にパフォーマンスが低下することです。これは、コンテンツ フィールドが大きくない可能性があるためです。たとえば、特定のパス内のすべてのファイルを一覧表示するクエリを実行する場合、MySQL エンジンは (ファイル名フィールドを読み取るために) where 句に一致する各行をメモリに読み込みます。つまり、クエリには不要なこのコンテンツをメモリにロードする必要があるため、パフォーマンスが低下します。
この問題の一般的な解決策は、常に ID によって直接アクセスされる別のテーブルにコンテンツを移動することです。このアプローチの問題点は、挿入と選択が複雑になることです。コンテンツが 1 つの行に直接関連付けられていることは、すぐにはわかりません。
それで、私の質問(最後に!)はこれです。ブロブをスキーマ内に残し、特に要求された場合にのみ MySQL に取得させる方法はありますか? 列に配置できる代替ストレージ エンジンまたは修飾子があるかどうか疑問に思っています。ありがとう!