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

推薦する

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

WeChatアプレットはキャンバスを使用して時計を描画します

この記事では、キャンバスを使用してWeChatアプレットに時計を描く具体的なコードを参考までに共有し...

MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列

シナリオによっては、varchar 型のフィールドを変更する必要があり、変更の結果は 2 つのフィー...

JavaScript タイマーの種類の概要

目次1.setInterval() 2.タイムアウトを設定する() 1.setInterval()指...

Linux 脆弱性スキャンツール lynis の使用分析

はじめに: Lynis は、徹底的なセキュリティ スキャンを実行できる Unix システム用のセキュ...

フロントエンド HTML+CSS+JS を使用してシンプルな TODOLIST 関数を開発する (メモ帳)

目次1. 簡単な紹介2. スクリーンショットを実行する3. コードの紹介4. まとめ1. 簡単な紹介...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

ARGB、RGB、RGBAの違いと紹介

ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...

コンテンツ領域の周囲を回転する CSS 動的グラデーション ボーダーの効果 (サンプル コード)

レンダリング ネットで関連情報を調べたところ、現在のダイナミックグラデーションボーダーの実装方法のほ...

Linuxにグラフィカルインターフェースをインストールする方法

1. Linuxのインストール(rootユーザー操作) 1. vncserver をインストールしま...

JavaScript の組み込み Date オブジェクトの詳細な説明

目次日付オブジェクト日付オブジェクトの作成新しい日付()日付を取得する()取得日()月を取得する()...

CocosCreator ユニバーサルフレームワークデザインネットワーク

目次序文Websocketの使用Websocketオブジェクトの構築Websocket ステータスW...

CSS3 引用のソースと出典をマークする方法

疫病のせいで家にこもりきりで、頭がおかしくなりそうなので、パソコンを起動して頭を働かせてみました。今...

WeChatアプレット認証ログインを処理するエレガントな方法

序文WeChat ミニプログラム プロジェクトでユーザー情報を取得し、ユーザー ログインを実装する場...