MySQL インデックスが失敗するいくつかの状況の概要

MySQL インデックスが失敗するいくつかの状況の概要

1. インデックスはnull値を保存しない

より正確に言うと、単一列インデックスには null 値は格納されず、複合インデックスにはすべて null の値は格納されません。インデックスには Null 値を格納できません。したがって、この列に is null 条件を使用すると、インデックスに Null 値がないためインデックスを使用できず、テーブル全体をスキャンすることしかできなくなります。
インデックス列に Null 値を格納できないのはなぜですか?
インデックス列の値のツリーを構築するには、必然的に多くの比較操作が必要になります。 Null 値の特別な特徴は、関係するほとんどの操作が null 値を取ることです。
この場合、null 値は実際にはインデックス作成プロセスに参加できません。つまり、null 値は他の値のようにインデックス ツリーのリーフ ノードには表示されません。

2. キー値が少ない列(重複データが多い列)には適していません

インデックス列 TYPE に 5 つのキー値があり、レコードが 10,000 件ある場合、WHERE TYPE = 1 はテーブル内の 2,000 個のデータ ブロックにアクセスします。
インデックス ブロックへのアクセスに加えて、合計 200 を超えるデータ ブロックにアクセスする必要があります。
テーブル全体をスキャンする場合、1 つのデータ ブロックに 10 個のデータ項目があると仮定すると、アクセスする必要があるデータ ブロックは 1,000 個だけです。テーブル全体のスキャンではアクセスするデータ ブロックが少なくなるため、インデックスは確実に使用されません。

3. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など)

'AAA'、'AAB'、'BAA'、'BAB' という値を持つコードの列があり、'%AB' のようなコードが入る条件があった場合、前の条件が曖昧なので、インデックスの順序は使えず、値を一つずつ検索して条件に合っているかどうかを調べる必要があります。これにより、完全なインデックス スキャンまたは完全なテーブル スキャンが実行されます。条件が「A % 」のようなコードである場合、CODE 内の A で始まる CODE の位置を検索できます。B で始まるデータに遭遇すると、後続のデータは確実に要件を満たさないため、検索を停止できます。この方法でインデックスを活用できます。

4. インデックス障害が発生するいくつかの状況

1. 条件に or がある場合、条件にインデックスがあっても or は使用されません (これが、 or ができるだけ使用されないようにする理由です)
またはを使用してインデックスを有効にする場合は、または条件内の各列にのみインデックスを追加できます。

nid = 1 または name = '[email protected]' の場合、tb1 から * を選択します。
 
 
 --特殊: or 条件は、インデックスが作成されていない列がある場合にのみ無効になります。次の例では、インデックス select * from tb1 where nid = 1 or name = 'seven' を使用します。
   nid = 1 または name = '[email protected]' かつ email = 'alex' の場合、tb1 から * を選択します。

2. 複数列インデックスの場合、インデックスは最初に使用される部分でない限り使用されません。

3.クエリが%で始まる

tb1 から * を選択します。メールアドレスは '%cn' のようなものになります。

4. 列の型が文字列の場合、条件内でデータを引用符で囲む必要があります。そうしないと、インデックスは使用されません。

tb1 から email = 999 の * を選択します。

5. MySQL は、テーブル全体のスキャンの方がインデックスよりも高速であると判断すると、インデックスを使用しません。

6. 通常のインデックスはインデックスがないことを意味するものではない

- !=
 tb1 から * を選択します。メールアドレスが != 'alex' の場合
 
 --特別: 主キーの場合、インデックスは引き続き使用されます。select * from tb1 where nid != 123
->
 tb1 から * を選択し、メール > 'alex' を選択します。
 
 
 --特別: 主キーまたはインデックスが整数型の場合、インデックスは引き続き使用されます。select * from tb1 where nid > 123
  tb1 から * を選択 (num > 123)

7. 複合インデックスの左端のプレフィックス

結合されたインデックスが次の場合: (名前、メール)

名前とメールアドレス - インデックスを使用
名前 -- インデックスを使用する
電子メール -- インデックスを使用しない

上記は、MySQL インデックスが失敗するいくつかの状況の詳細な概要です。MySQL インデックスの失敗の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Mysql インデックスが失敗するいくつかの状況の分析
  • MySQL のインデックス障害の一般的なシナリオと回避方法
  • MySQL でデータベース インデックスが失敗する状況の詳細な分析
  • mysql はインデックスを無効にしますか?
  • MySQL インデックス障害の 5 つの状況の分析
  • MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法
  • MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要
  • MySQLインデックスが失敗するいくつかの状況の詳細な分析
  • MySQLインデックスが失敗するいくつかの状況の分析
  • MySQL データベースのインデックスと障害シナリオの詳細な説明

<<:  Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

>>:  jsは、州、市、地区の3レベルのリンクの非選択ドロップダウンボックスバージョンを実現します。

推薦する

Docker で Portainer ビジュアル インターフェースを構築するための詳細な手順

前回述べた問題を解決するために、オンラインで検索したところ、非常に優れたビジュアル インターフェース...

JSのバイナリファミリーについての簡単な説明

目次概要ブロブBlob の動作BLOB ダウンロード ファイルブロブ画像のローカル表示BLOB ファ...

CSSでemを開く正しい方法の詳細な説明

「通常 1em=16px」と言うのはなぜですか?ユーザーのブラウザによってレンダリングされるデフォル...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...

MySQLはこのような更新文を決して書きません

目次序文原因現象なぜ?分析要約する序文今日は、非常に典型的な MySQL の「落とし穴」についてお話...

Vueモバイル端末の適応化問題の詳細説明

1. vue uiでプロジェクトを作成する 2. 基本設定項目を選択する 3. プロジェクトを実行す...

VMware Workstation 15 Pro インストール ガイド (初心者向け)

01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...

Vue シングルファイルコンポーネントの実装

最近、vue について読みました。これまで基本的に見落としていた単一ファイル コンポーネントを見つけ...

MySQLバイナリログを介してデータベースデータを復元する方法の詳細な説明

ウェブサイト管理者は、さまざまな理由や操作により、ウェブサイトのデータを誤って削除したり、ウェブサイ...

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...

Nginx ローカル ディレクトリ マッピング実装コード例

他のデバイスの画像をローカルディレクトリにマウントするなど、サーバー上の静的リソースにアクセスする必...

Windows 10 システムで nginx ファイル サーバーを構成するためのグラフィック チュートリアル

Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...

Dockerイメージ送信コマンドcommitの動作原理と使い方の詳細な説明

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

CentOS8でyumソースを変更した後にウェアハウスキャッシュの同期に失敗する問題の詳細な説明

問題の原因: 最初は CentOS 8 のデフォルトの yum ソースを正常に使用できますが、次のコ...