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の認証コマンドgrantの使い方

この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...

JavaScript のモジュール性の説明

目次序文: 1. コンセプト2. モジュール化の利点3. 複数のスクリプトタグを導入した後の問題1....

Javascript クロージャの使用シナリオの原則の詳細

目次1. 終了2. クロージャの使用シナリオ1.タイムアウトを設定する2. コールバック3. 手ぶれ...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

nginx を使用して正規表現で指定された URL リクエストを傍受する方法

nginx サーバーnginx は、静的ファイルの処理に非常に効率的な優れた Web サーバーです。...

CSS 画面サイズ適応実装例

CSS 画面サイズの適応を実現するには、まず CSS3 @media メディア クエリを導入する必要...

MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法

実際に参加したプロジェクトでは、MySQL テーブルのデータ量が数百万に達すると、通常の SQL ク...

Navicat が MySql サーバーにリモート接続できない問題の解決策

Navicat が MySql サーバーにリモート接続できない問題の解決策は、先頭に書かれています:...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

Mysqlはブール型の演算を設定します

Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...

Webフロントエンド開発経験の概要

XMLファイルは、可能な限りutf-8でエンコードする必要があります。gb2312には、?など、保存...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

少なくともn日間連続してログインしているユーザーに対するSQLクエリ

MySQL ツールを使用して、3 日間連続する例を見てみましょう。 1. SQL テーブルを作成しま...

Ubuntu インストール cuda10.1 ドライバ実装手順

1. cuda10.1をダウンロードします。 NVIDIA 公式ウェブサイト リンク: https:...