sql >> データベース >  >> RDS >> Mysql

MySQL(パフォーマンスとストレージ)でNULL

    使用するストレージエンジンによって異なります。

    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がパフォーマンスに与える影響について心配するのは、マイクロ最適化の領域です。あなたは他の場所、より大きな価値を与える領域に注意を向けるべきです。たとえば、適切に選択されたインデックスを追加したり、データベースのキャッシュ割り当てを増やしたりします。



    1. JavaでのMySQLの日時とタイムスタンプの処理

    2. SQLで数値を丸める方法

    3. IRIWorkbenchでのデータ分類

    4. SQL Serverで「datetime」を「time」に変換する(T-SQLの例)