MySQL 8.0 リファレンスマニュアル


8.4.2.3 BLOB 型の最適化

  • テキストデータを格納する大きな BLOB を保存する場合、まずそれを圧縮することを考慮します。 テーブル全体が InnoDB または MyISAM によって圧縮されている場合は、この技法を使用しないでください。

  • 複数のカラムのあるテーブルで、BLOB カラムを使用しないクエリーのメモリー要件を削減するには、BLOB カラムを個別のテーブルに分割し、必要に応じて、結合クエリーでそれを参照することを考慮します。

  • BLOB 値を取得し、表示するためのパフォーマンス要件は、ほかのデータ型と大きく異なることがあるため、BLOB 固有テーブルを別のストレージデバイスまたは個別のデータベースインスタンスに置くことができます。 たとえば、BLOB を取得するには、大量の順次ディスク読み取りが必要で、SSD デバイスより、従来のハードドライブの方が適しています。

  • バイナリ VARCHAR カラムの方が同等の BLOB カラムより推奨されることがある理由については、セクション8.4.2.2「文字および文字列型の最適化」を参照してください。

  • きわめて長いテキスト文字列に対して、同等性をテストする代わりに、個別のカラムにカラムのハッシュを格納し、そのカラムにインデックスを設定して、クエリー内のハッシュ値をテストします。 (MD5() または CRC32() 関数を使用して、ハッシュ値を生成します。) ハッシュ関数は、異なる入力で重複した結果を生成することがあるため、引き続きクエリーに句 AND blob_column = long_string_value を含めて、誤った一致に対して保護します。パフォーマンスは、ハッシュ値の小さく、簡単にスキャンされるインデックスからメリットが得られます。


関連キーワード:  テーブル, インデックス, InnoDB, BLOB, カラム, クエリー, 結合, ステートメント, データベース, リファレンス