さまざまなMySQLインデックスの使用方法の詳細な説明

さまざまなMySQLインデックスの使用方法の詳細な説明

1. 遅いクエリログ

1.1 MySQL ログの種類

ログは、データベースの操作や、ユーザーがデータベース上で実行したさまざまな操作を記録するために使用されます。データベース障害が発生した場合、ログに基づいて問題を分析・解決し、データベースを復元することができます

ここに画像の説明を挿入

1.2 スロークエリログを理解する

スロー クエリ ログは、応答時間が指定されたしきい値を超える MySQL データベース内のステートメントを記録するために使用されます。スロークエリログは、 SELECT文だけでなくINSERT、UPDATE、DELETEなどの文も対象とするため、スローログと呼ばれることもあります。応答時間が設定されたしきい値を超えている限り、スロークエリログに記録されます。

ここに画像の説明を挿入

1.3 スロークエリログコマンドを有効にする方法

スロー クエリ ログは、コマンドを使用して一時的に設定することも、構成ファイルを変更して永続的に設定することもできます。

スロークエリログが有効になっているかどうかを確認する

「slow%」のような変数を表示します。

スロークエリログを一時的に有効にする

slow_query_log を 'ON' に設定します。
long_query_timeを1に設定します。

低速クエリログファイルの場所

'%datadir%' のような変数を表示します。

2. クエリアナライザ - EXPLAIN

2.1 はじめに

explain コマンドを使用すると、SQL ステートメントの実行プランを表示できます。 explain が SQL ステートメントで使用されると、MySQL はステートメントの実行プランに関するオプティマイザーからの情報を表示します。つまり、MySQL は、テーブルを結合する方法と順序に関する情報を含め、ステートメントを処理する方法を説明します。

何を説明できますか?

  • 表の読み順を分析する
  • データ読み取り操作の操作タイプ
  • 使用できるインデックス
  • 実際に使用されているインデックスはどれですか?
  • テーブル間の参照
  • オプティマイザによって各テーブルにクエリされる行数

2.2 explainの使用

explain の使い方は非常に簡単です。SQL ステートメントの前にexplainコマンドを追加するだけです。select selectに加えて、explain はinsert、update和deleteステートメントも分析できます。

コマンドの説明:

ここに画像の説明を挿入

3. インデックスの基本的な使い方

3.1 インデックスとは何ですか?

インデックスは、書籍カタログに似た特殊なデータ構造であり、データベースのクエリ効率を大幅に向上させることができます。インデックスがない場合、データをクエリするときに、条件を満たすレコードを見つけるためにテーブル内のすべてのレコードをスキャンする必要があります。このフルテーブルスキャンのクエリ効率は非常に低くなります

要約: クエリの効率を向上させることは、ゴミを分類するようなものです。同じ効果を持つものをまとめて、見つけやすくします。

3.2 一般的なインデックスの種類

インデックスは、データベース テーブル内の1 つ以上の列の値を並べ替える構造です。インデックスを使用すると、データベース テーブル内の特定のレコードにすばやくアクセスできます。

データベースのインデックスは本の目次のようなもので、データベースのクエリを高速化できます。インデックスは高速検索の鍵です。インデックスがない場合、特定のデータを見つけるためにテーブル全体のスキャンが実行されます。

ここに画像の説明を挿入

3.3 索引の使用

インデックスを作成

通常のインデックスの作成

CREATE INDEX indexName ON tableName(columnName(length));

ユニークなインデックスの作成

tableName(columnName(length)) に一意のインデックス indexName を作成します。

複合インデックスの作成

CREATE INDEX indexName ON tableName(columnName1, columnName2, …);

インデックスの削除

DROP INDEX [indexName] ON tableName;

インデックスを表示

テーブル名からインデックスを表示します。

3.4 インデックス作成の実践経験

ここに画像の説明を挿入

IV. 複合指数の先頭列特性

複合インデックスの先頭列機能:MySQLでは、複合インデックス(name, salary, dept)を作成すると、 (name, salary, dept)、(name, salary)、(name)の3つのインデックスを作成するのと同等になります。そのため、複合インデックスを作成するときは、クエリ条件として最もよく使用される列を降順で左側に配置する必要があります。

リスト:

インデックスは使用されていません

給与が 8800 の従業員から * を選択します。
dept='Department A' の場合、employee から * を選択します。
salary=8800 かつ dept='Department A' の場合、employee から * を選択します。

名前の前にインデックス:を使用する

name='liufeng' の従業員から * を選択します。
name='liufeng' かつ salary=8800 の従業員から * を選択します。
name='liufeng'、salary=8800、dept='Department A' の場合、employee から * を選択します。

5. カバーインデックス

5.1 カバーインデックスとは何ですか?

カバーリング インデックスはインデックス カバレッジとも呼ばれ、データ行を読み取らずにインデックスからのみselectデータ列を取得できる、つまりインデックスをスキャンすることでクエリ結果を取得できることを意味します。

カバーインデックスに関する注意事項:

  1. カバーリング インデックスを使用すると、データ テーブルをスキャンせずにインデックスから必要なデータを取得できます。
  2. インデックスのサイズはデータ テーブルのサイズよりもはるかに小さいことが多いため、インデックスのみを読み取ると非常に高速になり、データ アクセスの量が大幅に削減されます。
  3. MySQL のクエリ オプティマイザは、クエリを実行する前に、すべてのクエリ列をカバーできるインデックスがあるかどうかを判断します。
  4. すべてのタイプのインデックスがカバーリング インデックスとして使用できるわけではありません。カバーリング インデックスには、インデックスが付けられた列の値を格納する必要があります。ハッシュインデックス、空間インデックス、フルインデックスなど
  5. テキスト インデックスには、インデックスが付けられた列の値は実際には保存されません。

5.2 カバーインデックスが使用されているかどうかを判断する方法

クエリがカバーリング インデックスを使用する場合、クエリ アナライザーEXPLAINExtra 列“Using index”と表示されます。

ここに画像の説明を挿入

以上で、MySQL の各種インデックスの詳しい使い方についての記事は終了です。MySQL のインデックスの使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

私のブログ: https://blog.csdn.net/weixin_46654114

以下もご興味があるかもしれません:
  • mysql インデックスの追加 mysql インデックスの作成方法
  • MySQL インデックスタイプの概要と使用上のヒントと注意事項
  • MySQL でインデックスを表示、作成、削除する方法
  • MySQL パフォーマンス最適化インデックス最適化
  • MySQL全文インデックスに基づく詳細な理解
  • MySQL における Btree インデックスとハッシュ インデックスの比較
  • MySQL インデックス分析と最適化
  • MySQL インデックスの正しい使い方とインデックスの原理の詳細な説明

<<:  HTMLフォーム要素の詳しい解説(パート2)

>>:  テーブルの追加と削除の操作を実装する js

ブログ    

推薦する

MySQLで時間を判定条件として使用する方法

背景: 開発プロセスでは、現在の月、現在の日、現在の時間、今後数日など、時間を判断条件としてデータを...

CentOs でノード バージョンを手動でアップグレードする方法

1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...

mysql はフィールドコンテンツの一部を置き換え、mysql は関数 replace() を置き換えます。

[mysql] replace の使用方法 (フィールドの内容の一部を置き換える) [mysql]...

LinuxサーバにおけるNginxとApacheの共存の実装方法の分析

この記事では、Linux サーバー上で Nginx と Apache の共存を実装する方法について説...

Dockerカスタムネットワークの詳細な紹介

目次Dockerカスタムネットワーク1. カスタムネットワークの紹介2. カスタムネットワークを作成...

LinuxのバックグラウンドでPythonプログラムを実行するいくつかの方法

1. 最初の方法は、unhup コマンドを直接使用してプログラムをバックグラウンドで実行することです...

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...

エンタープライズプロダクション MySQL 最適化入門

Oracle、DB2、SQL Server などの他の大規模データベースと比較すると、MySQL に...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

mysql-joinsの具体的な使用方法

目次結合構文: 1. InnerJOIN: (内部結合) 2. LeftJOIN: (左結合) 3....

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...

Robots.txtの詳細な紹介

robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...

Centos7 に mysql と mysqlclient をインストールする際に遭遇する落とし穴の概要

1. MySQL Yumリポジトリを追加するMySQL公式サイト>ダウンロード>MySQ...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...