MySQLのBLOBデータ型の最大サイズの理由が不明

2019年12月16日

MySQLのいわゆるBLOB型は、最大長によって型が異なっている。例えばバイナリ用の型としては、

  • TINYBLOB 最大長が 255 バイト。
  • BLOB 最大長が 65,535バイト。
  • MEDIUMBLOB 最大長が 16Mバイト。
  • LONGBLOB 最大長が 4Gバイト。

文字列型にも同じような複数の種類(いわゆるCLOB)がある。

さて、ウェブを検索してみると、MySQLのこのBLOBデータ型の種類についてあちこちに記述しているのだが、肝心の問題には一切答えていない。上の記述を見た方であれば誰でも疑問に思うはずなのだが、この疑問には一切答えられていないのである。

※こういった点について少しも疑問のわかない方というのは、そもそも確実にエンジニアには向いていないのだが、こういった解説記事を書いてる方はエンジニアでは無いのだろうか?

さて、その疑問というのは以下だ。

  • なぜサイズの違いがあるのか?
  • 例えば、おおよそ1Mのデータを格納したいのだが、MEDIUMBLOBではなくLONGBLOBを選択したら、何らかの「ペナルティ」があるのか?

※この場合の「ペナルティ」というのは、余計な領域が必要になるとか、遅くなってしまうということだ。

これを知りたいと思ったのだが、この疑問に答えている(わかりやすい)解説記事というのは、少なくとも日本語では全く見つけ出すことができなかった。が、英語では以下の書き込みを見つけた。

結局のところ、パフォーマンス上のペナルティは無く、より大きな最大サイズを保持するには、より大きなフィールドが必要なるということのようだが、どうもこれは実際のサイズを保持する領域の大きさの問題らしい。つまり、

  • TINYBLOBの場合は1バイト
  • BLOBの場合は2バイト
  • MEDIUMBLOBの場合は3バイト
  • LONGBLOBの場合は4バイト

程度である。そもそも格納したいデータの大きさに比較すると微々たるものかと思うのだが。。。。この「サイズ保持領域の1から4バイトの違い」が問題になるケースなど存在するのだろうか???