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レベルのリンクの非選択ドロップダウンボックスバージョンを実現します。

推薦する

オンライン MYSQL 同期エラーのトラブルシューティング方法の概要 (必読)

序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...

スタックメニューを実装するためのjQueryプラグイン

jQueryプラグインの毎日の積み重ねメニュー、参考までに、具体的な内容は次のとおりです。スタックメ...

CSS のフローティング サンプル コードをクリアする方法

概要この記事のフレームワーク図は次のとおりです。 1. フローティングとは一体何でしょうか? W3s...

CSS テキスト強調を使用してテキストを強調するための実装コード

1. はじめにこれまで、テキストの特定の部分を強調したい場合、通常は太字にしたり明るい色を使用したり...

MySQL 5.7 のパフォーマンスと sys スキーマの監視パラメータの説明 (推奨)

1. パフォーマンス スキーマ: はじめにMySQL 5.7 では、多数の新しい監視項目の導入、ス...

MySQL の行レベルロックの詳細な例

序文ロックは、複数のスレッドを実行するときにリソースへのアクセスを強制的に制限するために使用される同...

MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要

1. MySQLのデフォルトストレージエンジンの変更MySQL 5.1 より前のバージョンでは、デフ...

MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

MySQLの外部ネットワークアクセス権を開く方法

以下のように表示されます。主に認証コマンドを実行します: 2つの方法1. 任意のホストがユーザー b...

Nginx+SpringBoot による負荷分散の実装例

負荷分散の概要Nginx の負荷分散実装を紹介する前に、負荷分散の分類について簡単に説明します。負荷...

Web開発で使用される基本的な概念と技術の紹介

本日は、Web 開発で使われる基本的な概念と技術を初心者向けに紹介します。A から Z まで合計 2...

MySQL 自動インクリメント ID のオーバーサイズ問題のトラブルシューティングと解決策

導入Xiao A がコードを書いていたところ、DBA Xiao B が突然、「急いでユーザー固有情報...

MySQL テーブルとデータベースでデータを分割する方法

目次1. 縦方向のスライス1.1 垂直データベース1.2 垂直テーブル分割2. 水平(横断)セグメン...

WeChat アプレットのカスタム下部ナビゲーション バー コンポーネント

この記事の例では、WeChatアプレットの下部ナビゲーションバーコンポーネントの具体的な実装コードを...

HTML文書におけるol要素の数値制限に関する議論

一般的に言えば、HTML ドキュメント内で極端に大きな <ol> リストに遭遇する可能性...