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 をインストールする詳細なチュートリアル

推薦する

跳ねるボールを実現するネイティブjs

思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...

JavaScript 組み込みの日付と時刻の書式設定のサンプル コード

1. 基礎知識(日付オブジェクトのメソッド) 😜 getFullYear() は年を表す4桁の数字を...

MySQL データベースの基本的な SQL ステートメントの概要

この記事では、例を使用して、Mysql データベースの基本的な SQL ステートメントについて説明し...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

JavaScriptのスタックとコピーの詳細な説明

目次1. スタックの定義2. JSスタックの調査1. スタックとヒープ2. 基本型と参照型3. 値渡...

docker runとstartの違い

docker における実行と開始の違いDocker run はミラーイメージを指定します。そしてdo...

Win10 での MySQL 8.0.15 のインストールと設定のチュートリアル

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

MySQL で中国語を入力するときに発生するエラー 1366 の解決方法

MySQL で中国語を入力すると、次のエラーが発生します。エラー 1366: 1366: 行 1 の...

イメージのアップロードとダウンロードに docker をプロキシするためのプライベート ライブラリとして nexus を使用する

1. Nexusの設定1. Dockerプロキシを作成する外部ネットワーク ウェアハウスからローカル...

ウェブフロントエンドエンジニアにおすすめのヒント

まず、Webフロントエンドエンジニアの価値についてお話ししましょう。現在、Web製品のインタラクショ...

一般的なMySQLコマンドの概要

mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...

Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要

1. Linuxカーネルドライバモジュールの仕組み静的ロードでは、ドライバモジュールをカーネルにコン...

Linux での MySQL のインストールに関する詳細なチュートリアル

1. MySQLサービスをシャットダウンする# service mysqld stop 2. rpm...

Docker プライベート ウェアハウスを構築する (自己署名方式)

作成したイメージを一元管理し、サービスの展開を容易にするために、プライベート Docker リポジト...

Reactでコンポーネントロジックを共有する3つの方法

簡単に説明すると、これら 3 つの方法は、レンダリング プロップ、高階コンポーネント、カスタム フッ...