MySQL 実験: explain を使用してインデックスの傾向を分析する

MySQL 実験: explain を使用してインデックスの傾向を分析する

概要

インデックス作成は、MySQL で習得しなければならないスキルであり、MySQL クエリの効率を向上させる手段でもあります。次の実験を通して理解できますか? MySQLのインデックスルールはSQL文を継続的に最適化することもできる

目的

この実験は、複合インデックスの最も左の原理を検証するためのものである。

例示する

この実験はインデックスの実際の使用結果を検証するためのものであり、設計の合理性は無視してください。

準備

1. uid、user_name、real_name、eamilなどのフィールドを持つユーザーテーブル。詳細については、テーブル作成ステートメントを参照してください。
2. user_name フィールドの下に単純なインデックス user_name を追加し、email、mobile、age フィールドの下にインデックス complex_index を追加します。
3. テーブルエンジンはMyISAMを使用し、
4. 97,000 個のデータを用意します(具体的なデータ量は実際の状況に応じて決定できますが、ここでは 97,000 個以上を用意します)
5. 実験ツール Navcat

テーブルステートメントの作成

`qz_users` が存在する場合はテーブルを削除します。
テーブル `qz_users` を作成します (
 `uid` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ユーザーのUID',
 `user_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ユーザー名',
 `real_name` varchar(128) 文字セット utf8 デフォルト NULL コメント 'ユーザー名',
 `email` varchar(255) 文字セット utf8 デフォルト NULL コメント 'EMAIL',
 `mobile` varchar(16) 文字セット utf8 デフォルト NULL コメント 'ユーザーの携帯電話',
 `password` varchar(32) 文字セット utf8 デフォルト NULL コメント 'ユーザーパスワード',
 `salt` varchar(16) 文字セット utf8 デフォルト NULL コメント 'ユーザーが追加した難読化コード',
 `avatar_file` varchar(128) 文字セット utf8 デフォルト NULL コメント 'アバターファイル',
 `sex` tinyint(1) デフォルト NULL コメント '性別',
 `birthday` int(10) デフォルト NULL コメント '誕生日',
 主キー (`uid`)、
 キー `user_name` (`user_name`(250))、
 キー `complex_index` (`email`,`mobile`,`sex`)
) ENGINE=MyISAM AUTO_INCREMENT=1 デフォルト CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

準備されたクエリ

select * from qz_users where user_name = "ryanhe"; を説明します。
select * from qz_users where email = "x"; を説明します。
select * from qz_users where email = "x" and mobile = "x" and sex=1; を説明します。
select * from qz_users where email = "x" and mobile = "x"; を説明します。
select * from qz_users where email = "x" and sex = "x"; を説明します。
説明 select * from qz_users where sex = "x" and mobile = "x";
説明: select * from qz_users where mobile = "x" and sex = "0";

結果分析

user_name条件の使用

select * from qz_users where user_name= "x"; を説明します。

結果

分析する

インデックスを使用するかどうかインデックス名レコードをスキャンする
はいユーザー名1

メール条件を使用する

select * from qz_users where email = "x"; を説明します。

結果

分析する

インデックスを使用するかどうかインデックス名レコードをスキャンする
はい複合インデックス7

メール+モバイル+性別条件を使用する

select * from qz_users where email = "x" and mobile = "x" and sex=1; を説明します。

結果

分析する

インデックスを使用するかどうかインデックス名レコードをスキャンする
はい複合インデックス1

メール+モバイル条件を使用する

select * from qz_users where email = "x" and mobile = "x"; を説明します。

結果

分析する

インデックスを使用するかどうかインデックス名レコードをスキャンする
はい複合インデックス7

メールアドレス+性別条件を使用

select * from qz_users where email = "x" and sex = "x"; を説明します。

結果

分析する

][3] インデックスを使用するかどうかインデックス名レコードをスキャンする
はい複合インデックス7

性別+モバイル条件を使用する

説明 select * from qz_users where sex = "x" and mobile = "x";

結果

分析する

インデックスを使用するかどうかインデックス名レコードをスキャンする
いいえ97185

モバイル+セックス条件を使用する

説明: select * from qz_users where mobile = "18602199680" and sex = "0";

結果

分析する

インデックスを使用するかどうかインデックス名レコードをスキャンする
いいえ97185

結論は

上記の結果から、結合インデックスを設定した後、クエリ条件の順序を適切に使用することで、SQL ステートメントのクエリが遅くなるのを回避できることがわかります。

以下もご興味があるかもしれません:
  • Explainキーワードに基づいてMySQLインデックス機能を最適化する方法
  • MySQL インデックス最適化の説明
  • mysql explain(分析インデックス)の使い方の詳しい説明
  • MySQL インデックスと Explain 分析の組み合わせ例

<<:  JavaScript で長い画像のスクロール効果を実装する

>>:  CentOS 7.5 に Docker をインストールする詳細なチュートリアル

推薦する

SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...

Node.js mysqlクライアントが認証プロトコルをサポートしていない問題を解決する

序文mysql モジュール (プロジェクト アドレスは https://github.com/mys...

Apache ストレステストツールのインストールと使用

1. ダウンロードApacheの公式サイトhttp://httpd.apache.org/にアクセス...

シンプルなドラッグ効果を実現するJavaScript

この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Maven で tomcat8-maven-plugin プラグインを使用する詳細なチュートリアル

オンラインで多くの記事を検索しましたが、解決策は見つかりませんでした。次のように、tomcat7-m...

MySQL 実行ステータスの表示と分析

MySQL のパフォーマンスに問題があると思われる場合は、通常、まずshow processlist...

Windows 版 MySQL のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル

ダウンロード:ステップ 1: ウェブサイトを開きます (ダウンロードするには公式ウェブサイトにアクセ...

WeChatミニプログラムで検索キーワードを強調表示するサンプルコード

1. はじめにプロジェクトで要件に遭遇したら、データを検索してキーワードを強調表示します。要件を受け...

React.cloneElement の使い方の詳しい説明

目次cloneElementの役割使用シナリオ新しい小道具を追加するプロップを変更するイベントカスタ...

HTMLバージョン宣言DOCTYPEタグ

通常のウェブサイトのソースコードを開くと、ソースコードは<!DOCTYPE htmlで始まる必...

4つのファイル拡張子 .html、.htm、.shtml、.shtm の違い

ウェブページを作り始めたばかりの友人の多くは、拡張子が非常に多いことに気づきます。実際、htm と ...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

Vueはカスタムツリーコンポーネントを再帰的に実装します

この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...

vue-cli でレスポンシブ レイアウトを実装する方法

フロントエンド開発を行うと、PCとモバイル端末の適応に必然的に直面することになります。このような問題...

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする yum インストール -y memcached #memcac...