MySql インデックスを表示および最適化する方法

MySql インデックスを表示および最適化する方法

MySQL はハッシュ インデックスと Btree インデックスをサポートしています。 InnoDB と MyISAM は Btree インデックスのみをサポートしますが、Memory および Heap ストレージ エンジンはハッシュ インデックスと Btree インデックスの両方をサポートできます。

次のステートメントを使用して、現在のインデックスの使用状況を照会できます。

'%Handler_read%' のようなステータスを表示します。

+-----------------------+-------+
| 変数名 | 値 |
+-----------------------+-------+
| ハンドラー_read_first | 0 |
| ハンドラー読み取りキー | 0 |
| ハンドラー_read_last | 0 |
| ハンドラー_read_next | 0 |
| ハンドラー_read_prev | 0 |
| ハンドラー読み取り回数 | 0 |
| ハンドラー_read_rnd_next | 0 |
+-----------------------+-------+

インデックスが機能している場合、Handler_read_key の値は高くなります。この値は、インデックス値によって行が読み取られる回数を表します。値が低い場合、テーブル名にインデックスを追加することでのパフォーマンスの向上は高くないため、インデックスはあまり使用されません。

Handler_read_rnd_next の値が高い場合、クエリが非効率的に実行されていることを意味し、状況を改善するためにインデックスを作成する必要があります。この値は、データ ファイルの次の行を読み取る要求の数を意味します。大量のテーブルスキャンが行われている場合、Handler_read_rnd_next は高くなります。これは、インデックスが正しくないか、使用されていないことを示します。

最適化:

挿入ステートメントを最適化します。

1. テスト値()、()、()、() に挿入してみます。

2. 異なる顧客から複数の行を挿入する場合、INSERT 遅延ステートメントを使用すると、速度を上げることができます。遅延とは、INSERT ステートメントがすぐに実行されることを意味します。実際には、データはメモリ キューに配置され、実際にはディスクに書き込まれません。これは、各ステートメントを個別に挿入するよりもはるかに高速です。Low_priority は正反対です。挿入は、他のすべてのユーザーがテーブルの読み取りと書き込みを終了した後に実行されます。

3. インデックスファイルとデータファイルを別のディスクに保存する(テーブル作成ステートメントを使用)

4. バッチ挿入を実行している場合は、bulk_insert_buffer_size 変数値を増やして速度を上げることができますが、これは MyISAM テーブルの場合のみです。

5. テキストファイルからテーブルをロードする場合は、データファイルのロードを使用します。これは通常、挿入を使用するよりも20倍高速です。

group by ステートメントを最適化します。

デフォルトでは、MySQL はすべての group by フィールドをソートします。これは order by に似ています。クエリに group by が含まれているが、ユーザーが並べ替えられた結果の使用を避けたい場合は、order by null を指定して並べ替えを抑制できます。

order by ステートメントを最適化します。

場合によっては、MySQL はインデックスを使用して ORDER BY 句を満たすことができるため、追加のソートが不要になります。 where 条件と order by は同じインデックスを使用し、order by 順序はインデックス順序と同じで、order by フィールドは昇順または降順になります。

ネストされたクエリの最適化:

MySQL 4.1 ではサブクエリのサポートが開始されましたが、場合によっては、特に結合するパッシブ テーブルにインデックスがある場合、サブクエリをより効率的な結合に置き換えることができます。その理由は、MySQL では、論理的に 2 つの手順を必要とするこのクエリを完了するために、メモリ内に一時テーブルを作成する必要がないためです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLはカバーインデックスを使用してテーブルリターンを回避し、クエリを最適化します。
  • MySQLインデックスを最適化する方法
  • Explainキーワードに基づいてMySQLインデックス機能を最適化する方法
  • インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法
  • MySQL 関数インデックス最適化ソリューション
  • MySQL パフォーマンスの最適化: インデックスを効率的かつ正しく使用する方法
  • MySQL インデックスクエリ最適化スキルを習得するための記事
  • MySQL データベースの最適化: インデックスの実装原則と使用状況の分析
  • MySQLインデックス最適化分析に関する簡単な説明
  • MySQL を理解する - インデックス作成と最適化の概要
  • MySQL インデックスの設計と最適化の方法

<<:  ウェブテーブルフレームを作成するためのヒント

>>:  docker CMD/ENTRYPOINT が sh スクリプトを実行する問題の解決策: not found/run.sh:

推薦する

Dockerはイメージ名とTAG操作の名前を変更します

docker イメージを使用する場合、以下に示すように、REPOSITORY と TAG の両方が ...

Vueのスロットの詳細な説明

Vue でのコードの再利用により、mixnis が提供されます。テンプレートの再利用により、スロット...

MySQLはインデックスプッシュダウンを数秒で理解するのに役立ちます

目次1. インデックスプッシュダウン最適化の原理2. インデックスプッシュダウンの具体的な実践1. ...

ウィンドウ内のさまざまな距離/スクロール距離の正確な計算の概要

通常、プロジェクト開発では、マージン、位置、座標などを扱う必要があります。悲劇なのは、これらの概念が...

MySql ストアド プロシージャ パラメータの初歩的な使用法の詳細な説明

パラメータでのストアドプロシージャの使用IN パラメータは、プロシージャに情報を渡すためにのみ使用さ...

docker compose の記述ルールについての簡単な説明

この記事ではクラスタの展開に関連する内容は紹介しませんバージョン制約Docker エンジン >...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...

vueプロジェクトは特定の領域に透かしを描くことを実現する

この記事では、Vueを使用して特定の領域に透かしを描く方法を紹介します。具体的な内容は次のとおりです...

Sublime Text - ブラウザのショートカットキーを設定するための推奨方法

コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...

HTML ページをズームアウトした後にスクロール バーを表示するためのサンプル コード

ここでは、HTML ページのサイズを縮小した後に下部にスクロール バーを表示し、スクロール バーをス...

docker-compsoe を使用してフロントエンドとバックエンドを分離したプロジェクトをデプロイする方法

事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...

ウェブページでコンテンツを引用するためによく使われるHTMLタグをマスターする

長い引用には blockquote を、短い引用には q を、参考文献には cite を使用します。...

MYSQL サブクエリとネストされたクエリの最適化例の分析

ゲーム史上最高スコアトップ100をチェックSQLコード cdb_playsgame ps から ps...

Vue でメニュー権限制御を実装するためのサンプルコード

バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...

Vueのvue-tree-colorコンポーネントの組織構造図の事例を詳しく解説

目次ネプローダーをインストールするプラグインのインポート始める配置折りたたみディスプレイノードをクリ...