概要 リレーショナル データベースでは、インデックスは、データベース テーブル内の 1 つ以上の列の値を並べ替える、独立した物理的なストレージ構造です。これは、テーブル内の 1 つ以上の列の値のコレクションと、これらの値を物理的に識別するテーブル内のデータ ページへの対応する論理ポインターのリストです。 MySQL はハッシュ インデックスと Btree インデックスをサポートしています。 InnoDB と MyISAM は Btree インデックスのみをサポートしますが、Memory および Heap ストレージ エンジンはハッシュ インデックスと Btree インデックスの両方をサポートできます。 1. 現在のインデックスの使用状況を表示する 次のステートメントを使用して、現在のインデックスの使用状況を照会できます。
実際、多くのアプリケーション シナリオでは、インデックスが動作しているとき、Handler_read_key の値は非常に高くなります。この値は、行がインデックス値を読み取る回数を表します。値が非常に低い場合、インデックスが頻繁に使用されないため、インデックスを追加することで得られるパフォーマンスの向上は大きくないことを示します。 Handler_read_rnd_next の値が高い場合、クエリが非効率的に実行されており、インデックス作成によって修正する必要があることを意味します。この値は、データ ファイル内の次の行を読み取る要求の数を意味します。大量のテーブル スキャンが実行されている場合、Handler_read_rnd_next の値が高いことは通常、テーブルが正しくインデックス付けされていないか、書き込まれたクエリがインデックスを活用していないことを示します。 2. インデックスが使用されているかどうかを確認する 選択 オブジェクトタイプ、 オブジェクトスキーマ、 オブジェクト名、 インデックス名、 カウントスター、 カウント_読み取り、 COUNT_FETCH から PERFORMANCE_SCHEMA.table_io_waits_summary_by_index_usage; 読み取りとフェッチの数が両方とも 0 の場合は、使用されていないことを意味します。 3. 使用されているインデックスを確認する 関連するSQLを説明し、クエリでどのインデックスタイプが使用されているかを確認します。 +-----+-------+-------+-------+--------+--------+--------+-------+ | ALL | インデックス | 範囲 | ref | eq_ref | const | システム | NULL | +-----+-------+-------+-------+--------+--------+--------+-------+ 最高から最低の順に次のとおりです。 システム > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
ちなみに、最適化のポイントをいくつか挙げます。 1. 挿入ステートメントを最適化します。
2. group by ステートメントを最適化します。 デフォルトでは、MySQL はすべての group by フィールドをソートします。これは order by に似ています。クエリに group by が含まれているが、ユーザーが並べ替えられた結果の使用を避けたい場合は、order by null を指定して並べ替えを抑制できます。 3. order by ステートメントを最適化します。 場合によっては、MySQL はインデックスを使用して ORDER BY 句を満たすことができるため、追加のソートが不要になります。 where 条件と order by は同じインデックスを使用し、order by 順序はインデックス順序と同じで、order by フィールドは昇順または降順になります。 4. ネストされたクエリを最適化する: MySQL 4.1 ではサブクエリのサポートが開始されましたが、場合によっては、特に結合するパッシブ テーブルにインデックスがある場合、サブクエリをより効率的な結合に置き換えることができます。その理由は、MySQL では、論理的に 2 つの手順を必要とするこのクエリを完了するために、メモリ内に一時テーブルを作成する必要がないためです。 最後に、ポイント: テーブルには最大 16 個のインデックスを設定でき、インデックスの最大長は 256 バイトです。インデックス作成の時間オーバーヘッドは O(1) または O(logN) であるため、インデックスは一般に挿入パフォーマンスに大きな影響を与えません (大量の小さなデータを除く)。ただし、インデックスが多すぎるのも良くありません。結局のところ、更新などの操作ではインデックスの維持が必要になります。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vite2+Vue3を使用してMarkdownドキュメントをレンダリングする練習
この記事では、参考までに、シンプルなチャットルームを実装するためのnode+socketの具体的なコ...
VMware で Linux 仮想マシンを作成し、VMware と仮想マシンのネットワークを設定する...
mysql が正常に実行されている場合、テーブル構造を表示することは難しくありません。しかし、場合...
Mybatis ファジークエリ実装方法mybatis のリバース アシスタントは非常に使いやすく、通...
目次序文1. 準備2. 実際の戦闘2.1 ミニプログラムの権限を設定する2.2 カプセル化ツールの機...
<br />「XXXのウェブサイトを見てみませんか?」といった質問をされることもあります...
2つの状況がある1. 開始時間と終了時間が同じボックス内にあります(今月のみ限定) 2. 開始時間と...
Node.js では、.js ファイルは完全なスコープ (モジュール) です。したがって、var に...
脆弱性の詳細VSFTP は、GPL に基づいてリリースされた Unix ライクなシステムで使用される...
目次序文実際の戦闘1. ロックなし2. 悲観的ロック3. 楽観的ロック要約する序文悲観的ロックと楽観...
なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...
目次1. Bootstrap5 ブレークポイント1.1 モバイルファースト1.2 ブートストラップブ...
十分に最適化されていない、またはパフォーマンスが極端に低い SQL ステートメントに直面した場合、通...
目次これ方法オブジェクト内これを隠した厳密モード要約するJavaScript の this も不思議...
目次序文&& 演算子|| 演算子|| 演算子の簡単なデモ章の目的ケース演習(json...