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

推薦する

Dockerを使用して開発環境を構築する方法を素早く習得します

プラットフォームが成長し続けるにつれて、プロジェクトの研究開発は、開発者向けのさまざまな外部環境、特...

JS WebSocket 切断理由とハートビートの仕組みの詳しい説明

1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...

MySQLでテーブルを接続するいくつかの方法

MySQL テーブルでの接続方法は実は非常に簡単なので、ここではその特徴を簡単にリストします。テーブ...

パゴダパネルとドッカーを使用して Gogs をインストールするプロセス全体

目次1 Baota Software StoreにDockerをインストールする2 ゴグスイメージを...

Zabbixを使用してMySQLを監視する方法

Zabbix 導入ドキュメントzabbix導入後zabbixエージェントの操作1. MySQLを監視...

CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策

序文最近、CentOS 7 で MySQL 5.7.23 をアップグレードする際に落とし穴を発見しま...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

VS2019をMySQLデータベースに接続するプロセスと一般的な問題の概要

今日の午後からVS2019をMySQLで使えるのではないかと思い、いろいろ環境構築を始めました。プロ...

CSS でホバー ドロップダウン メニューを実装する方法

いつものように、今日は非常に実用的な CSS 効果についてお話します。マウスがボタンに移動すると、ド...

MySQL でよく使用される SQL 文を表示する (詳細な説明)

#mysql -uroot -pパスワードを入力してくださいmysql> show full...

Zabbixを介してデータベース接続情報といくつかの拡張機能をすばやく取得します

背景アプリケーション システムの数が増え続けると、当初はアラームを発していなかったアクティブ スレッ...

qt.qpa.plugin の問題を解決: Ubuntu 18.04 の Qt で Qt プラットフォーム プラグイン「xcb」をロードできませんでした

問題の説明Qt5.15.0 をインストールした後、テスト ケースを実行するとエラーが表示されます。 ...

16 の XHTML1.0 と HTML の互換性ガイドラインの概要

1.ページを XML タイプとして宣言しないでください。ページでは UTF-8 または UTF-16...

CentOS 7 パスワードを忘れた場合の解決プロセス図

必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...