MySQLのSQL文はインデックスを使用しません

MySQLのSQL文はインデックスを使用しません

インデックス集約を使用しない MySQL クエリ

ご存知のとおり、インデックスを追加することはクエリ速度を向上させる効果的な方法です。ただし、多くの場合、インデックスを追加してもクエリはインデックスを使用しないため、パフォーマンスに重大な影響を及ぼします。ここでは、MySQL がインデックスを使用しない簡単な例をいくつか示します。

MySQL は、インデックスを使用するとテーブル全体のスキャンよりも遅くなると予測した場合、インデックスを使用しません。たとえば、列キーselect * from table_name where key>1 and key<90;

MEMORY/HEAP テーブルを使用し、列のインデックス付けに where 条件で "=" を使用しない場合、インデックスは使用されません。ヘッド テーブルは、"=" 条件が使用されている場合にのみインデックスを使用します。

or で区切られた条件の場合、条件内の or の前の列にインデックスがあり、その後の列にインデックスがない場合は、関連するインデックスは使用されません。たとえば、 select * from table_name where key1='a' or key2='b';の場合、key1 にはインデックスがあるが key2 にはない場合、クエリはインデックスを使用しません。

複合インデックスの場合、インデックス列が複合インデックスの最初の部分でない場合、インデックスは使用されません(つまり、左端のプレフィックスを満たしません)。たとえば、複合インデックスが (key1, key2) の場合、クエリselect * from table_name where key2='b';インデックスを使用しません。

like が '%' で始まる場合、その列のインデックスは使用されません。たとえば、 select * from table_name where key1 like '%a' ; このクエリは、key1 にインデックスがあっても使用されません。

列が文字列の場合、文字定数値は where 条件で引用符で囲む必要があります。そうしないと、列にインデックスが存在しても使用されません。たとえば、 select * from table_name where key1=1;場合、key1 列に文字列が格納されていると、key1 にインデックスがあっても使用されません。

上記から、インデックスを作成しても使用されない可能性があることがわかります。では、インデックスの使用状況をどのように確認すればよいのでしょうか? ? MySQL には、 Handler_read_keyHandler_read_rnd_keyという 2 つの変数があります。Handler_read_key の値が非常に高く、Handler_read_rnd_key の値が非常に低い場合は、インデックスがあまり使用されていないことを意味し、インデックスの作成を再検討する必要があります。これら 2 つのパラメータの値は、 show status like 'Handler_read%'を通じて表示できます。

MySQL インデックスを正しく作成する方法の詳細については、MySQL インデックスを正しく作成する方法の詳細な説明を参照してください。ご存知のとおり、テーブル インデックスは、データ取得の効率を向上させ、データベース IO コストを削減し、データベースのソート コストを削減できます。ただし、インデックスは常に効果的であるとは限りません。たとえば、次の状況ではインデックスが失敗します。

1. 条件に or がある場合、条件にインデックスがあってもインデックスは使用されません (SQL 文で or ができるだけ使用されないようにするのはこのためです)

注: または を使用してインデックスを有効にする場合は、または条件内の各列にのみインデックスを追加できます。

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

3. like クエリが % で始まる場合、インデックスは使用されません。

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

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

さらに、インデックスの使用状況を表示します

「Handler_read%」のようなステータスを表示します。

誰もが注目できる点:

handler_read_key : 値が高いほど良いです。値が高いほど、インデックスがクエリに使用される回数を示します。

handler_read_rnd_next : この値が高いほど、クエリの効率は低下します。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQLストレージ時間タイプの選択に関する問題の説明
  • MySQL における 10 進数型の使用法の簡単な紹介
  • あるテーブルのデータの列を別のテーブルの列にコピーするMySQLメソッド
  • MySQL Limitクエリのパフォーマンスを向上させる方法
  • MySQL マスター/スレーブ データベース同期構成と一般的なエラー
  • Mysql Explainコマンドの使用と分析
  • MySQLインデックスを正しく作成する方法
  • MySQL での replace と replace into の使い方の説明
  • MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法
  • MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介

<<:  JavaScript による省・市連携効果の実現

>>:  Vue vee-validateプラグインの簡単な使い方

推薦する

MySQL トリガーの使用シナリオとメソッドの例

トリガー:トリガーの使用シナリオと対応するバージョン:トリガーは次の MySQL バージョンで使用で...

vue.js ベースの QQ チャット ルーム

目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...

VUE無限レベルツリーデータ構造表示の実装

目次コンポーネントの再帰呼び出しレンダリングメソッドの使用プロジェクトに取り組んでいると、左側のメニ...

Element-uiはテーブル内のセルを直接クリックして編集します

目次成果を達成する実装コード最近、会社でelementUIを使い始めたため、開発の過程でテーブルのセ...

Elimination の JavaScript ソースコード

ゲームのソースコードのダウンロードアドレスを取得するためのJavaScript:クリックしてソースコ...

CSS3で実装されたサムネイルホバー効果

成果を達成する実装コードhtml <ヘッダー> <h1><em>...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

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

この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...

Vueアイコンセレクターのサンプルコード

出典: http://www.ruoyi.vip/ 'vue' から Vue をイン...

HTML ページジャンプとパラメータ転送の問題

HTMLページジャンプ: window.open(url, "", "...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...

Centos7.3は起動時に自動的に起動または指定されたコマンドを実行します

Centos7では、/etc/rc.d/rc.localファイルの権限が削減されており、実行権限があ...

javascript 入力画像のアップロードとプレビュー、FileReader プレビュー画像

FileReader は、フロントエンドのファイル処理、特に画像処理にとって重要な API です。画...

nginx ssl を設定して https アクセスを実装する手順 (初心者向け)

序文サーバーを展開した後、私は大きな喜びを感じながら自分の Web サイトにアクセスし、見たものすべ...