MySQL のインデックスにおける NULL の影響についての詳細な説明

MySQL のインデックスにおける NULL の影響についての詳細な説明

序文

私は多くのブログを読み、弊社の DBA を含む多くの人々が、MySql では列に null が含まれている場合、その列を含むインデックスは無効であると言っているのを聞きました。

私は「High Performance MySQL 2nd Edition」と「MySQL Technology Insider - InnoDB Storage Engine 2nd Edition」をざっと読みましたが、これに関する紹介は見つかりませんでした。しかし、ローカルで試してみたところ、null 列は、単一列インデックスでも結合インデックスでもインデックスを使用できるが、is null に限定されていることがわかりました。is not null ではインデックスは使用されません。

その後、列に null が含まれている場合でもインデックスを使用できるという説明が公式ドキュメントに見つかりました。アドレスは https://dev.mysql.com/doc/refman/5.7/en/is-null-optimization.html です。

MySQL 5.6 と 5.7 の両方で動作し、ストレージ エンジンは InnoDB です。

データは次のとおりです。

1. 単一列インデックス

名前列に単一列インデックスを作成します。

名前が null の行をクエリします。

名前が 'test0' または null である行をクエリします。

インデックスが使用できることがわかります。

2. 共同インデックス

年齢と名前に結合インデックスを追加します。


年齢が 14 で名前が null の行をクエリします。

インデックスも使用されていることがわかります。

3. その他

MySQL は null を含む列のインデックスを使用できますが、null がインデックス内の他のデータと同じであることを意味するわけではありません。

列に null を許可することはお勧めしません。 null 以外を制限し、0 や '' 空文字列などのデフォルト値を設定するのが最適です。日付時刻型の場合は、「1970-01-01 00:00:00」などの特別な値に設定できます。

MySQL では、null は特別な値です。概念的には、NULL は「不明な値」を意味し、他の値とは多少異なる方法で扱われます。たとえば、=、<、> などの演算子は使用できません。null に対する算術演算の結果は null になります。null 行はカウントに含まれません。null は空の文字列よりも多くのストレージ スペースを必要とします。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL インデックスの設計と最適化の方法
  • MySQLのインデックス設計の原則と一般的なインデックスの違いについて簡単に説明します。
  • MySQLインデックスに関する重要な面接の質問をいくつか共有します
  • インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

<<:  WeChatミニプログラムでの仮想リストの実装例

>>:  Ubuntu 18.04 に vsftpd をインストールするための実装コード

推薦する

MySQLでJSONフィールドを操作する方法

MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...

MySQLパスワードを変更するいくつかの方法

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

iconfontアイコンライブラリをvueに導入するエレガントな実践記録

目次序文SVGを生成するSVGスプライトの紹介プロジェクトアイコンを取得するプロジェクトのセットアッ...

JS デコレータ パターンと TypeScript デコレータ

目次デコレータパターンの紹介TypeScript のデコレータデコレータの使用デコレーターファクトリ...

UDP DUP タイムアウト UPD ポート状態検出コード例

以前、単純な UDP サーバーとクライアントの例を書きましたが、その中で、自分自身をクライアントと見...

MySQL DMLステートメントの使用に関する詳細な説明

序文:前回の記事では、注意深い学生であれば発見できたかもしれない DDL ステートメントの使用法を中...

JS配列メソッドsome、every、findの使用に関する詳細

目次1. いくつか2. すべての3. 見つける1. いくつかsome()メソッドは、指定された関数の...

MySQL 5.7.17 のインストールと設定のグラフィックチュートリアル

ブロガーはこう述べています。「私は『史上最も簡単な MySQL チュートリアル』という一連のブログ記...

魔法のMySQLデッドロックトラブルシューティング記録

背景MySQL のデッドロックについて言えば、私は以前 MySQL のロックに関する基本的な紹介記事...

Vueでファジークエリを実装する方法の簡単な例

序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...

Dockerがコンテナサービスを停止または削除できない問題の解決策

序文今日、開発者から、コンテナ サービスを停止、rm (docker rm -f)、または強制終了で...

要素テーブルからヘッダーを削除する方法

show-header属性を使用したドキュメントのヒントshow-header <el-テーブ...

サブセットかどうかを判断するためのMySQLメソッドの手順

目次1. 問題2. 解決策オプション1:オプション2: 1. 問題この話は、エラーと脱落率を照会する...

Nodejs プラグインと使用方法の概要

このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 12.19....

トランザクション分離レベルのMySQLケース分析

目次1. 理論シリアル化可能繰り返し読み取りコミットされた読み取りコミットされていない読み取り2. ...