MySQL 最適化における B ツリー インデックスの知識ポイントのまとめ

MySQL 最適化における B ツリー インデックスの知識ポイントのまとめ

SQL を最適化する必要があるのはなぜですか?当然ですが、SQL ステートメントを記述する場合、次のようになります。

  • 1 パフォーマンスが低いことがわかります
  • 2. 実行時間が長すぎる
  • 3. 待ち時間が長すぎる
  • 4. SQL文が正しくなく、インデックスが無効です
  • 5. サーバーのパラメータ設定が不合理である

SQL文実行プロセス分析

1. 執筆プロセス:

記述プロセスは、日常生活における SQL 文の記述プロセスであり、記述順序とも言えます。記述順序は次のとおりです。

選択、結合、条件、グループ化、グループ化、フィルタ グループ、順序、並べ替え制限、クエリ数の制限

このように記述しましたが、MySQL エンジンは解析時に上記の順序に従いません。

最初に選択して解析するのではなく、最初から解析します。つまり、解析プロセスは書き込みプロセスと一致していません。そこで、発行された解析順序を見てみましょう。

2. 解析プロセス:

from on join where group by having select order by limit

上記は MySQL の解析プロセスです。私たちが書いたプロセスとはまったく矛盾していることがわかりました。

索引

インデックスとは何ですか?簡単に言えば、それは本のカタログです。

例えば、辞書で「王」という単語を調べたい場合、目次なしで「王」という単語を見つけたい場合は、辞書を最初から最後までめくる必要があります。1000ページある場合は、見つけるまで1ページずつめくる必要があります。

索引はディレクトリに相当します。「王」という単語を検索する前に、まずディレクトリを調べて、「W」が 300 ページにあることを確認します。「王」の最初の文字は「W」なので、300 ページから直接検索できます。この方法により、非常に迅速に見つけることができます。

データベース内のキーワード「index」は「insex」です。公式の定義によると、インデックスは、MySQL がデータを迅速かつ効率的に取得するのに役立つデータ構造です。

インデックスは、データを効率的にクエリするために使用されるデータ構造です。

それで、それはどのようなデータ構造ですか?

実際、それはツリーです。B ツリーとハッシュ ツリーの方がよく使用されます。MySQL では、B ツリー インデックスが使用されます。

Bツリーインデックス

まず、これをデータ テーブルであると仮定して図を描き、年齢列にインデックスを追加します。

このインデックスをディレクトリとして考えてください。つまり、年齢 50 は最初の行を指し、年齢 33 は 5 番目の行を指します。

次に、B ツリー インデックスを描画して、インデックスがどのように作成されるかを確認します。

ageにインデックス列を追加すると、ツリーのようになり、小さい値は左側に、大きい値は右側に配置されます。最初の列は50で、50より小さい値は左側に配置され、23と23より小さい値は引き続き左側に配置されます。

33 は 23 より大きいので、左に配置されます。20 は 22 より小さいので、22 の後も左に配置され続けます。

たとえば、今度は 33 を確認する必要があります。

テーブル名から、年齢 = 33 を選択します。

インデックスがない場合、検索は 50 から始まります。50 は 23 でも 22 でも、... でもありません。インデックスがない場合、検索は 1 つずつ開始されます。

インデックスを追加すると、33 を検索し、33 が 50 より小さいことがわかります。最初は 23 を検索します。2 回目は、33 が 23 より大きいことがわかります。3 回目は、わずか 3 回で検索します。

インデックスのデメリット

1. インデックス自体は多くのスペースを占有し、メモリ/ハードディスクに保存できます(通常)

2. インデックスは、データ量が少ない場合や頻繁に更新されるフィールドなど、すべての状況に適用できるわけではありません (データ テーブル内の列が頻繁に変更される場合、この列はインデックス作成に適していません)

3. インデックスは確かにクエリの効率を向上させますが、同時に追加、削除、変更の効率を低下させます。次に例を示します。

インデックスはありません。44 を 45 に変更する場合は、簡単に変更できます。インデックスがある場合は、テーブル内の 44 だけでなく、B ツリー内の 44 も変更する必要があります。

1 つ上げて 3 つ下げるのは費用対効果が悪いと考える人もいますが、実際には非常に費用対効果が高いのです。

クエリ、追加、削除、変更はほとんど行われず、クエリはパフォーマンスに大きな影響を与えるため、使用することが非常に重要です。

インデックスの利点

1. クエリ効率の向上

クライアントは IO、つまり入力ストリームと出力ストリームを介してサーバーに接続するため、クエリの効率を向上させることは IO 使用量を削減することを意味します。

2. CPU使用率を下げる

たとえば、SQL で order by desc ステートメントを使用して年齢を降順または昇順に並べ替える場合、インデックスがなければすべての年齢を並べ替える必要があります。ただし、インデックスがあれば、年齢を並べ替える必要はありません。B ツリー自体は並べ替えられた構造です。左端が最小で、右端が最大である必要があります。

特定のルールに従ってそれを横断するだけです。

以上がBナンバー指数に関する重要な知識ポイントです。123WORDPRESS.COMをご愛読いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL Bツリーインデックスとインデックス最適化の概要についての簡単な説明
  • MySQL で B+ ツリー インデックスを使用する利点は何ですか?
  • MySQL の B ツリー インデックスと B+​​ ツリー インデックスの違いの詳細な説明

<<:  VMware ワークステーションの仮想マシンの互換性の問題に対する解決策

>>:  jsはタイトルと説明のキーワードを検出し、見つかった場合は置換するか他のページにジャンプします。

推薦する

Vueはユーザーログイン切り替えを実装します

この記事では、ユーザーのログイン切り替えを実現するためのVueの具体的なコードを例として紹介します。...

TeamCenter12 にログインする際の 404/503 問題の解決方法

TeamCenter12はアカウントのパスワードを入力し、ログインをクリックすると、404または50...

JS に依存せずにレスポンシブ レイアウトを実現する CSS3 モバイル vw+rem メソッド

1. はじめに(1)vw/vhの紹介使用する前に、vw と rem とは何か、その機能について簡単に...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

Zabbix で監視項目と集約されたグラフを設定するためのサンプルコード

1. ローカルマシンを監視するためにZabbixエージェントをインストールするエージェントソフトウェ...

水平ヒストグラムを作成するための MySQL ソリューション

序文ヒストグラムは、RDBMS によって提供される基本的な統計情報です。最も一般的に使用されるのは、...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

VS2019 が mysql8.0 データベースに接続する方法 (画像とテキスト付き)

1. まず、VS2019とMySQLデータベースを準備します。どちらも公式サイトからダウンロードで...

JavaScript で支払いの 10 秒カウントダウンを実現

この記事では、支払いの10秒カウントダウンを実現するためのJavaScriptの具体的なコードを参考...

Zabbix で複数の JVM プロセスを監視する方法

1. シナリオの説明:私たちの環境ではマイクロサービスを使用しています。各プログラムには個別のプロセ...

光るテキストとちょっとしたJS特殊効果を実現するCSS

実装のアイデア: CSSでtext-shadowを使用してテキストの光る効果を実現します効果画像: ...

JSは賞金の重さに基づいて当選確率を計算します

目次1. シナリオ例1.1. 抽選の賞品名を設定する1.2. 各賞の重みを設定する1.3. ラッキー...

Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法

序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...

tbodyタグの魔法はテーブルコンテンツの表示を高速化します

他の人のウェブページを保存して見たことがあると思いますが、特にdwで開くと、多くのウェブページに&l...

Windows での mysql-5.7.28 のダウンロード、インストール、および構成に関する詳細なグラフィックとテキストのチュートリアル

最近MySQLデータベースのバージョンを変更する必要があり、それを記録するために記事を書きます1. ...