さまざまな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

推薦する

Linux パーティションまたは論理ボリュームにファイルシステムを作成する方法

序文システムにファイル システムを作成し、それを永続的または非永続的にマウントする方法を学習します。...

一般的なMysql DDL操作の概要

図書館管理ライブラリを作成する データベースを作成します [存在しない場合] ライブラリ名;ライブラ...

フロントエンドJavaScriptの動作原理

目次1. JavaScript エンジンとは何ですか? 2. V8エンジン3. ランタイム環境4. ...

MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

KTLツールはMySQLからMySQLへのデータの同期方法を実現します

ktl ツールを使用して、mysql から mysql にデータを同期します。 1. 新しいジョブス...

Dockerコンテナのインポ​​ートとエクスポートに関するチュートリアル

背景Docker の人気は、コンテナの共有と移植が容易であることと密接に関係しています。ユーザーは、...

CSS3は背景画像にマスクを設定し、マスクスタイルの継承の問題を解決します。

多くの場合、透明度の設定やぼかしなど、写真の背景を加工する必要があります。 ただし、背景画像が配置さ...

Docker 経由で Redis 6.x クラスターをデプロイする方法

システム環境: Redis バージョン: 6.0.8 Docker バージョン: 19.03.12シ...

シンプルなショッピングカート機能を実現するjs

この記事の例では、簡単なショッピングカート機能を実現するためのjsの具体的なコードを参考までに共有し...

nginx のスムーズな再起動を実装する方法

1. 背景サーバーの開発プロセスでは、新しいコードや構成をロードするためにサービスを再起動することが...

ZabbixはLinuxシステムサービスのプロセスを監視

Zabbix は Linux システムのサービス ユニットを監視するためのルールを自動的に検出します...

HTMLのタグについての簡単な説明

0. タグとは何ですか? XML/HTML コードコンテンツをクリップボードにコピー<入力 t...

Windows サービス 2012 Alibaba Cloud サーバーで MySQL をビルドするときに msvcr100.dll ファイルが見つからないという問題を解決します

解決策1: msvcr100.dll ファイルをダウンロードし (インターネットからソース ファイル...

一般的な Linux の問題に対する解決策の概要

1. VMwareでCentos7を接続し、固定IPを設定する1) まず、仮想イメージ名を右クリック...

IE で ClearType をオンにした後の透明フォントの問題の解決方法

IE で ClearType をオンにした後に発生する透明フォントの問題を解決するには、透明要素に背...