概要 リレーショナル データベースでは、インデックスは、データベース テーブル内の 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ドキュメントをレンダリングする練習
通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...
質問: div+css と配置を使用して角丸四角形を実現するにはどうすればよいですか?ソリューション...
通常、ユーザーがアップロードした写真はデータベースに保存する必要があります。一般的に、解決策は 2 ...
node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindo...
この記事では、テーブル構造操作やフィールド操作など、MySQL データ テーブルの基本的な操作につい...
効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...
FOUC は Flash of Unstyled Content の略で、FOUC と略されます。簡...
序文誰もが日常業務で SQL の最適化を経験したことがあると思います。したがって、最適化の前に、遅い...
序文最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原...
はじめに: Windows 10 を再インストールし、同時にファイルを整理しました。しかし、MySQ...
負荷は通常、システム設計時に予測されます。システムがパブリック ネットワークに公開されている場合、悪...
目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...
借財宝は最近人気が出ている携帯電話ローンソフトウェアプラットフォームです。知人同士の貸し借りが特徴で...
前面に書かれた今日のインターネット分野では、Nginx は最も広く使用されているプロキシ サーバーの...
導入作業プロセス中に、遅いクエリが調整されることがあります。 MySQL SQL ステートメントのチ...