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

推薦する

Dockerを使用してNextCloudネットワークディスクを展開する方法

NextCloud コンピュータ上の任意のファイルやフォルダを共有し、NextCloud サーバーと...

Tencent Cloud で HTTPS を無料で導入する方法

最近、WeChatアプレットを書いていたとき、WeChatアプレットではすべてのリクエストインターフ...

WindowsシステムでMySQLデータベースを完全にアンインストールして、MySQLを再インストールします

1. コントロールパネルで、MySQLのすべてのコンポーネントをアンインストールします。コントロール...

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

HTML 入力属性値属性value 属性は、入力フィールドの初期値を指定します。 <フォーム...

nginx の default_server 定義とマッチングルールの詳細な説明

nginx の default_server ディレクティブは、server_name と一致しない...

LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。

0x0 テスト環境本社本番サーバーと支社バックアップサーバーはリモートデータバックアップが必要です...

10分で始めるCSS3アニメーション

導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...

DockerはホストのMysql操作に接続します

今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...

複数人チャットルームを実現する js コード

この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有して...

Vue3ライフサイクル関数とメソッドの詳細な説明

1. 概要いわゆるライフサイクル機能とは、特定の条件下で自動的にトリガーされる機能です。 2. VU...

JavaScript はチェックボックスの選択機能を実装します

この記事の例では、すべてのチェックボックスの選択を実現するためのJavaScriptの具体的なコード...

ZabbixはPSK共有キーを使用してサーバーとエージェント間の通信を暗号化します。

Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...

入力のsize属性とmaxlength属性の違い

最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...

ES6のシンボルデータ型について詳しく説明します

目次シンボルデータタイプシンボルが表示される理由シンボルの特徴シンボルの応用rbオブジェクトにupメ...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...