この記事では、MySQL インデックス カバレッジについて例を挙げて説明します。ご参考までに、詳細は以下の通りです。 インデックスカバー クエリ対象の列がインデックスの一部である場合、クエリはインデックス ファイルに対してのみ実行すればよく、データを見つけるためにディスクに戻る必要はありません。このタイプのクエリは非常に高速であり、「インデックス カバーリング」と呼ばれます。 t15テーブルがあり、そこに結合インデックスが作成されているとします: cp (cat_id, price) 次の SQL ステートメントを使用すると、インデックス カバレッジが発生します。信じられないなら、調べてみましょう。ここでの Extra には、Using index と表示されています。これは、この SQL ステートメントがインデックス カバレッジのみを使用していることを意味します。 cat_id = 1 の場合、t15 から価格を選択します。 質問を見てみましょう。電子メール列にインデックスが付いた t11 テーブルを作成します。 次のクエリを使用するとします。 t11 から eamil を選択します。right(email,4)='.com' クエリ分析: まずはExtraを見てみましょう。ここにUsing indexとありますが、これはインデックスカバレッジが使われていることを意味します。possible_keysがNULLになっているのは、MySQLの関数を使用しているため、クエリ中にメールインデックスが使われていないのですが、キーがメールなので、ソートにインデックスが使われていることを意味します。信じられない方は、データを印刷して見てください。 ここのデータはソートされています。元データはこんな感じです。 インデックスカバーの問題 テーブルAを作成( id varchar(64) 主キー、 ver int、 … ) テーブルには、idとverの結合インデックスを持つ、非常に長いフィールドvarbinary(3000)がいくつかあり、合計10,000レコードになります。 質問: id と (id,ver) はどちらもインデックスを持っており、select id は「インデックス カバレッジ」の効果を生み出すはずです。前者は遅く、後者は速いのはなぜですか? アイデア: InnoDB クラスター化インデックスと MyISAM インデックスの違い、これら 2 つの観点からインデックス カバレッジを考慮する (1) このテーブルが MyISAM インデックスを使用していると仮定すると、これら 2 つの SQL 文はどちらもデータを検索するために行を戻る必要がないため、速度は同様になるはずです。 (2)このテーブルがInnoDBインデックスを使用していると仮定すると、SQL文select id from A order by idは主キーインデックスを使用します。これは、InnoDBの各主キーが各行のデータを保持し、この問題には特に大きなフィールドがいくつかあるため、idの検索が比較的遅くなるためです。SQL文select id from A order by id,verはid、ver結合インデックスを使用します。InnoDBストレージエンジンでは、セカンダリインデックスに主キーインデックスのアプリケーションが格納されるため、セカンダリインデックスには行のデータは保持されません。この場合、(id、ver)インデックスでidを検索する方が高速になります。対応するノードツリーが見つかったら、主キーインデックスの場所を再度検索するだけで、行のデータを取得できます。これは高速です。 推測する: (1)テーブルがMyISAMエンジンを使用している場合、2つのステートメントの速度に大きな違いはありません。 テーブル t12 (ストレージ エンジン MyISAM) には、主キー インデックスと (id,ver) インデックス、およびいくつかの大きな可変長フィールドがあります。テスト推論 1 InnoDB ストレージ エンジンを備えたテーブル t13 には、主キー インデックスと (id,ver) インデックス、およびいくつかの大きな可変長フィールドがあります。 テーブル t14、ストレージ エンジンは InnoDB、主キー インデックスと (id,ver) インデックスがあり、大きな可変長フィールドはありません。 補論 3 t12、t13、t14 の各テーブルには 10,000 個のデータが含まれており、テストが実行されます。テスト結果は次のようになり、推論は正しいです。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: zabbix 4.04 の詳細なインストール チュートリアル (CentOS 7.6 ベース)
序文多くの場合、仮想マシンを使用します。たとえば、一部のテストは検出されません。何かを壊すことを心配...
メタタグは、HTML言語のヘッド領域にある補助タグです。HTML文書のヘッダーにあるヘッドタグとタイ...
序文実際のプロジェクトの開発では、通常、プロジェクト開発フェーズ、テストフェーズ、最終オンラインフェ...
この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...
目次0x01. パゴダパネルをインストールする0x02. サーバーポートを開く0x03. ブラウザを...
動的な列を実現するための Angularjs ループ オブジェクト プロパティ利点: オブジェクトを...
方法:説明: どちらも達成できません:方法1: sp_product から sp.productid...
有線ネットワーク: イーサネット 無線ネットワーク: 4G、WiFi、Bluetooth、5G 概要...
1. イメージをプルするまず、次のコマンドを実行して、イメージをローカル コンピューターにダウンロー...
1. インストール環境コンピュータモデル: Lenovo Y471a (i5) ノートパソコンシステ...
成果を達成する要件/機能: CSS + HTML を使用してハートを描く方法。分析:正方形と 2 つ...
目次1. beforeCreateとcreated関数2. beforeMountとmount関数3...
効果環境が必要ビュー要素UIドラッグアンドドロッププラグインSortable.js必要な構成プロパテ...
説明する: Tabs コンポーネントが切り替わると、TabPane に含まれる同じサブコンポーネント...
目次1. まずプロジェクトにechartsをインストールします2. echartsに縦棒グラフテンプ...