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

推薦する

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

WeChatアプレット認証ログインを処理するエレガントな方法

序文WeChat ミニプログラム プロジェクトでユーザー情報を取得し、ユーザー ログインを実装する場...

Vue3のレスポンシブ原則の詳細な説明

目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...

HTML入力で値が変更されたときにリスナーイベントを追加することの簡単な分析

達成される効果多くの場合、入力ボックスの値の変化をリアルタイムで監視し、ブラウザを誘導してウェブサイ...

CSS3 でクールなスライス画像カルーセル効果を実現

今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...

Angularデータバインディングとその実装の詳細な説明

目次序文データバインディングとは何ですか? Angular のデータバインディングの種類一方向データ...

CSS 位置固定左と右の二重配置実装コード

CSS 位置position 属性は、要素の配置タイプを指定します。位置プロパティには 5 つの値が...

dockerでマウントされたディレクトリが読み書きできない問題を解決する

次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...

HTMLの水平線注釈とコードコメントの使い方をマスターするだけです

水平線<hr /> タグを使用して、現在の位置に水平の分割線を描画します。例: XML/...

Linux サーバーでの MySQL インストール情報の表示

mysql のインストール情報を表示します。 #ps -ef | grep mysql usr/bi...

MySQL 8.0.13 のダウンロードとインストールのチュートリアル(画像とテキスト付き)

MySQL は最もよく使用されるデータベースです。詳しく知るには、コンピュータにインストールする必...

React NativeプロジェクトでLottieアニメーションを使用する方法

Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...

Echarts 凡例コンポーネントのプロパティとソース コード

凡例コンポーネントは、ECharts でよく使用されるコンポーネントです。シリーズ マーカーの名前を...

MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ

この記事では、MySQL の null (IFNULL、COALESCE、NULLIF) に関連する...

HTML 画像 img にハイパーリンクを追加した後の醜い青い境界線の問題を解決する

HTML画像にハイパーリンクを追加すると醜い青い枠線が表示される次のように:解決: CSS スタイル...