基本的に、mysqlは、テーブルごとのレベルでを変更しない限り、可変の行長を持ちます。したがって、空の列はスペースを使用しません(まあ、ほとんど)。
ただし、ブロブまたはテキスト列の場合は、これらを正規化する方がよい場合があります。これらには保存するデータが大きく、テーブルをスキャンするたびに読み取る/スキップする必要があるためです。列が結果セットに含まれておらず、インデックスの外部でクエリを実行している場合でも、大量の行に対して時間がかかります。
良い習慣として、すべての管理用および頻繁に使用される列を1つのテーブルに入れて、残りをすべて正規化するのが速いと思います。 2番目の例のような一種の「垂直」設計は、読み取るのが複雑になり、一時テーブルを操作するとすぐに、遅かれ早かれパフォーマンスの問題が発生します。