使用するストレージエンジンによって異なります。
MyISAM形式では、各行ヘッダーには、NULL状態をエンコードするために各列に1ビットのビットフィールドが含まれています。 NULLの列は引き続きスペースを占有するため、NULLによってストレージが削減されることはありません。 https://dev.mysql.com/doc/internals/を参照してくださいen / myisam-introduction.html
InnoDBでは、各列の行ヘッダーに「フィールド開始オフセット」があります。これは、列ごとに1バイトまたは2バイトです。列がNULLの場合、そのフィールドの開始オフセットの上位ビットはオンになります。その場合、列を格納する必要はまったくありません。したがって、NULLが多数ある場合は、ストレージを大幅に削減する必要があります。 https://dev.mysql.com/doc/internals/en/innodb-field-contents.html
編集:
NULLビットは行ヘッダーの一部であり、追加することは選択しません。
NULLがパフォーマンスを向上させると想像できる唯一の方法は、InnoDBでは、行にNULLが含まれている場合、データのページがより多くの行に収まる可能性があることです。そのため、InnoDBバッファーの方が効果的かもしれません。
しかし、これが実際にパフォーマンスに大きな利点をもたらすとしたら、私は非常に驚きます。 NULLがパフォーマンスに与える影響について心配するのは、マイクロ最適化の領域です。あなたは他の場所、より大きな価値を与える領域に注意を向けるべきです。たとえば、適切に選択されたインデックスを追加したり、データベースのキャッシュ割り当てを増やしたりします。