MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。

MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。

インデックスを追加すると、クエリの効率が向上します。

インデックスを追加するということは、ドキュメントのディレクトリと同様に、データのアドレスを格納するインデックス ファイルを追加することを意味します。検索プロセス中は、本のコンテンツから検索する必要はなく、ディレクトリに対応するページ番号に従って直接検索できます。インデックスはアドレスに基づいて検索されます。
インデックスを作成します。インデックスで使用されるデータ構造は多数あります。一般的なものとしては、B ツリー、ハッシュなどがあります。 MySQL で使用されるデフォルトのデータベース インデックスは innerDB であり、innerDB のインデックス構造は B ツリーです。
しかし、どのような状況でインデックスを追加しても、使用中に期待どおりの結果が得られないのでしょうか?よくある状況は次のとおりです:
名前、年齢、住所がインデックスされていると仮定します。インデックス名は、index_name、index_age、および index_address です。

explainを使用してSQL実行プランを表示します

実行計画の種類

MySQL がテーブル内の必要な行を見つける方法を示します。これは「アクセス タイプ」とも呼ばれます。一般的なタイプは次のとおりです。

ALL、インデックス、範囲、ref、eq_ref、const、システム、NULL
ALL: フルテーブルスキャン。MySQLはテーブル全体をスキャンして一致する行を検索します。
index: フル インデックス スキャン。index と ALL の違いは、インデックス タイプはインデックス ツリーのみをトラバースすることです。
range: インデックス範囲スキャン。インデックスのスキャンは特定のポイントから開始され、値の範囲に一致する行を返します。明らかなインデックス範囲スキャンは、<、> を含む between 句または where 句を使用したクエリです。 MySQL がインデックスを使用して IN() や OR リストなどの値の範囲を検索する場合、範囲スキャンも表示されますが、もちろんパフォーマンスには違いがあります。
ref: 非一意インデックススキャンまたは一意インデックスのプレフィックススキャンを使用して、単一の値に一致する行を返します。
eq_ref: ref と似ていますが、使用されるインデックスが一意のインデックスであるという点が異なります。各インデックス キー値に対して、テーブル内に一致するレコードは 1 つだけです。簡単に言えば、主キーまたは一意のキーは、複数のテーブルを結合する際の結合条件として使用されます。

1. またはを使用して複数の列を照会します。type=all

ここに画像の説明を挿入

2. あいまいクエリを使用する、type=all

ここに画像の説明を挿入

3. インデックスフィールドの操作

ここに画像の説明を挿入

4. 列の型が文字列の場合は引用符で囲む必要があります。名前フィールドは文字列型です

引用符なし type=all

ここに画像の説明を挿入

引用符があります tye=ref

ここに画像の説明を挿入

まず、MySQL には「文字を数値」に変換する型変換ルールがあります。上記の SQL には次の操作が含まれています。
SELECT name,age,address FROM user where cast(name as signed)= 10; を説明します。

5. 逆クエリの区別

(not、not in、not like、<>、!=、!>、!<) インデックス効果を使用する

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

その他の状況

1. 共同インデックス内の関連フィールドは同じ文字セットを使用していません。
2. 最初のインデックス フィールドは結合インデックス クエリでは使用されません。つまり、左端の原則は満たされません。
3. データ量自体が少ないため、MySQL がインデックスが必要かどうかを判断します。

これで、MySQL にインデックスを追加しても機能しないいくつかの状況に関するこの記事は終了です。MySQL にインデックスを追加しても機能しない状況の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視の概要
  • MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス
  • MySQL ジョイントインデックスの使用ルール
  • インデックススキャンを使用したMySQLソート
  • MySQLインデックスとは何ですか?わからない場合は聞いてください

<<:  Vueライフサイクル機能の詳細な説明

>>:  見栄えの良い CSS カスタム スタイル (タイトル h1 h2 h3)

推薦する

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

Ubuntu Server 16.04 MySQL 8.0 のインストールと設定のグラフィックチュー...

Linuxでユーザーが所属するグループを変更する方法

Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...

Vue はデータの変更をどのように追跡しますか?

目次背景例誤解 - コールスタックを表示するためにウォッチでブレークポイントを設定する正しいアプロー...

forループ内のvarの問題の解決

序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変...

HTML のスクロールバーについて/スクロールバーの削除

1. xhtmlの下のスクロールバーの色元の HTML では、ページ全体のスクロール バーを次のよう...

MySQL は対応するクライアント プロセスにどのように接続しますか?

質問特定の MySQL 接続について、それがどのクライアント プロセスからのものであるかをどのように...

要素の属性を削除する JS removeAttribute() メソッド

JavaScript では、要素の removeAttribute() メソッドを使用して、指定され...

IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...

alpineをベースにdockerfileで作成したtomcatイメージの実装

1.アルパインイメージをダウンロードする [root@docker43 ~]# docker pul...

MySQLのMVCCマルチバージョン同時実行制御の実装

1 MVCCとは何かMVCC の正式名称は、マルチバージョン同時実行制御です。データベースへの同時ア...

CPU、マシンモデル、メモリなどの情報を表示するLinuxシステム

システムメンテナンス中は、いつでも CPU 使用率を確認し、対応する情報に基づいてシステムの状態を分...

MySQL のスローログオンラインの問題と最適化ソリューション

MySQL スロー ログは、MySQL DBA やその他の開発および運用担当者が細心の注意を払う必要...

SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります...

Alibaba Cloud Centos7.3 インストール mysql5.7.18 rpm インストール チュートリアル

MariaDBをアンインストールするCentOS7 ではデフォルトで MySQL の代わりに Mar...

SSL で Nginx リバース プロキシを構成する簡単な手順

序文リバース プロキシは、Web 経由で行われたリクエスト (http と https の両方) を...