[解決済み] MySQLのNULL (パフォーマンスとストレージ)
質問
MySQL において null はパフォーマンスおよびストレージ(スペース)上、具体的に何をするのですか?
例えば
TINYINT: 1バイト TINYINT w/NULL 1バイト + なぜか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
EDITです。
NULLビットは行ヘッダの一部であり、追加することを選択するものではありません。
NULL がパフォーマンスを向上させると私が想像できる唯一の方法は、InnoDB において、行が NULL を含む場合、データのページがより多くの行に適合する可能性があるということです。 そのため、InnoDB バッファはより効果的である可能性があります。
しかし、これが実際に大きなパフォーマンス上の利点を提供するのであれば、私は非常に驚きます。 NULL がパフォーマンスに与える影響について心配することは、マイクロ最適化の領域です。 他の分野、つまり、より大きな利益をもたらす分野に注意を向けるべきでしょう。 例えば、適切に選択されたインデックスの追加や、データベースキャッシュの割り当ての増加などです。
関連
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQLラーニングノート--オペランドには1つのカラムが必要です。
-
MySQL】1136 - 列数が1行目の値数と一致しない問題を解決
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] Selectステートメントで特定のフィールドの重複を検索する