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

推薦する

MACOS で MySQL ルートパスワードを忘れた場合の解決策

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

Vue3 を使用してアップロード コンポーネントを実装するためのサンプル コード

目次一般的なアップロードコンポーネントの開発以下の機能を実装する必要がありますカスタムテンプレートサ...

MySQL の一般的なツール例の概要 (推奨)

序文この記事では主にMySQLでよく使われるツールに関する関連コンテンツを紹介し、皆さんの参考と学習...

Centos8環境でSSHポート番号を変更する方法

目次序文始める序文サーバーのデフォルトの SSH ポート番号は通常 22 であるため、ほとんどのユー...

win10にmysql 8.0.18-winx64をインストールする詳細な手順

1. まず公式ウェブサイトにアクセスしてMySQLインストールパッケージをダウンロードします参考: ...

Nginx 逆生成 Mogilefs 分散ストレージ例の詳細な説明

1. 分散ストレージシステムの概要情報技術の継続的な発展により、利便性がもたらされる一方で、データ量...

Vue 2.0 の基礎を詳しく解説

目次1. 特徴2. 例3. オプション4. 基本的な文法5. ライフサイクル6. ルーティング管理 ...

マルチコア CPU を使用して Linux コマンドを高速化する方法 (GNU Parallel)

非常に大量のデータ(数百 GB)を計算する必要があったことはありますか?または、その内部を検索したり...

Quill エディタでカスタム HTML レコードを挿入する詳細な例

もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...

Vue の vue.$set() メソッドのソースコード例の詳細な説明

Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...

アーティストの自己啓発におけるいくつかの経験

会社の影響力が拡大し、製品が改良され続けるにつれて、関連するイメージデザインもそれに追いつき、徐々に...

Centos7 ベースの Nginx Web サイト サーバーの構築の詳細説明 (仮想 Web ホストの構成を含む)

1. Nginx サービス基盤Nginx (エンジン x) は、パフォーマンスの最適化のために特別...

MySQL データ型の完全分析

データ型: 列に格納できるデータとそのデータが実際にどのように格納されるかを定義する基本ルール。デー...

HTML テーブルタグチュートリアル (45): テーブル本体タグ

<tbody> タグは、テーブル本体のスタイルを定義するために使用されます。基本構文 &...

preタグを自動的に折り返すためのサンプルコード

pre 要素は、フォーマット済みのテキストを定義します。 pre 要素で囲まれたテキストでは、通常、...