私が知る限り、BLOB (および TEXT) は実際にはテーブルの外に格納され、VARCHAR はテーブルに格納されます。
VARCHAR は、各レコードが可変長になる可能性があり、レコード内のフィールドを検索するコストが高くなるため、読み取りパフォーマンスが低下します。BLOB は、値を個別にフェッチする必要があり、ディスクまたはキャッシュからの別の読み取りが必要になる可能性が非常に高いため、低速です。
私の知る限り、InnoDB はこの点で何も変わらないので、パフォーマンス特性が維持されると思います。
BLOB 値を移動しても、パフォーマンスにプラスの影響を与えるテーブル全体のサイズを縮小する以外は、実際には役に立たないと思います。VARCHAR は別の話です。あなたは間違いなくここで利益を得るでしょう。すべての列の長さが定義されている場合 (つまり、BLOB も使用できないということですか?)、フィールドの検索は高速になります。
VARHCAR フィールドと BLOB フィールドを「読んでいる」だけなら、試してみる価値があると思います。しかし、選択クエリで VARCHAR または BLOB の値を比較する必要がある場合は、かなり面倒です。
したがって、ここで確実にパフォーマンスを向上させることができますが、実際にパフォーマンスが向上していること、およびその増加が積極的な非正規化に見合う価値があることを必ずテストしてください。
PS。
VARCHAR 読み取りパフォーマンスを「最適化」するもう 1 つの方法は、単純に (固定長の) CHAR フィールドに置き換えることです。これにより、ディスク容量の増加が許容できる限り、読み取りパフォーマンスが向上する可能性があります。