このノートでは、
少しずつ見ていくと、実はとても簡単に理解できます。 私の以前のメモを読んだことがあるなら、MySQL がメモリ内、つまりバッファ プール内で CRUD を実行することをご存知でしょう。また、メモリ内に MySQL が必要とするデータがない場合、MySQL は IO 操作を通じてディスクからメモリにデータを読み込むこともご存じでしょう。読み取り単位はデータページです 一般的なデータページの長さは次のとおりです。 そうです、実際のデータはデータ ページに保存され、データ ページはメモリ内で双方向リンク テーブルとして編成されます。下記の通り B+Tree の設定では、主キー インデックスを増分する必要があります。つまり、主キー インデックスを増分する場合は、右側のデータ ページ内のすべてのデータが左側のデータ ページのデータよりも大きくなければなりません。しかし、上の図は明らかに一致していないので、ページ分割によって以下のように調整する必要があります。 さて、思い出してみてください。以前にも聞いたことがあるはずです。MySQL の B+Tree クラスター化インデックスでは、リーフ ノードのみが実際のデータを格納し、非リーフ ノードはインデックス データを格納し、リーフ ノードは双方向のリンク リストによって接続されます。 そうです、B+ツリーのすべてのリーフノードは上図のデータページであり、それらは実際に二重リンクリストによってリンクされています。 読み進めてみましょう。上の図のデータ ページによって接続された二重リンク リストだけを見ると、id=7 のデータ行を取得すると何が起こるでしょうか。 当然、スキャンを最初からやり直す必要があります。 すると、あなたはこう思うかもしれません: B+ ツリーでは主キーが増加する必要があると言ったのではないですか?また、右側のデータ ページ内のすべてのデータが左側のデータ ページのインデックス値よりも大きくなるようにするページ分割メカニズムがあります。バイナリ検索を実行してみませんか? 回答: はい、確かに単一のデータ ページでバイナリ検索を実行することは可能ですが、データ ページ間の組織関係はリンク リストであるため、最初からのトラバーサルは避けられません。 では、MySQL はどうでしょうか? 下図に示すように、MySQLは多くのデータページのインデックスディレクトリを抽象化します。 このインデックス ディレクトリを使用すると、多数のデータ ページ間の検索がはるかに簡単になります。バイナリ検索の能力を直接持つ! そして、このディレクトリは実際にはデータ ページに存在します。リーフ ノードとの違いは、リーフ ノードには実際のデータが格納されるのに対し、このディレクトリにはインデックス情報のみが格納されることです。 インデックス ページの誕生は、B+Tree のプロトタイプが誕生したことを意味します。 ユーザーが選択を続けると、バッファー プール内のデータ ページの数が増加し、インデックス ページ内のデータ数も増加します。既存のインデックス サイズが 16 KB (データ ページの容量) を超える場合、新しいインデックス情報を格納するために新しいインデックス ページを作成する必要があります。この時点で、B+ツリーは徐々に太くなっていきます。 そして、B+ツリーはBツリーの変種であり、Bツリーは実際には2-3ツリー、2-3-4ツリーなどのM次ツリーの総称であることがわかります。各ノードに格納できる要素が上限に達すると、ツリーは高くなります(前の記事で説明しました)。 次の図のように: 以上がMySQLクラスタ化インデックスの詳細な内容と、クラスタ化インデックスがどのように成長するかであり、一目で理解できます。MySQLクラスタ化インデックスの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Docker で Confluence をデプロイするための完全な手順
>>: デザイン参考 WordPressウェブサイト構築成功事例
サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...
目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...
最近、あるウェブサイトのバックエンドに一連の統計機能を追加していたのですが、条件によるカウントが必要...
シナリオ 1: HTML: <div class="outer"> ...
今日ご紹介したいのは、ネイティブ JS を使用してプログレス バーをドラッグし、要素の透明度を変更す...
コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...
この記事の例では、セカンダリメニュー効果を実現するためのJSの具体的なコードを参考までに共有していま...
Mysql5.5 デュアルマシン ホットスタンバイ実装 2つのMySQLをインストールするMySQ...
目次前面に書かれたWC とは何でしょうか?現在の欠陥1. コンポーネント内部イベントのコールバック2...
JS で関数を定義する 3 つの方法例を挙げて説明しましょう。 <スクリプト> //メソ...
目次序文MySQL マスタースレーブレプリケーションMySQL でサポートされているレプリケーション...
導入最近、Docker の ARM バージョンがあることを知りました。 hub.docker.com...
1. 分析的思考1. 機械自身の理由を排除する2. サーバーパフォーマンス分析3. プロジェクト自体...
目次1. MySQLのインストール1.2 テーブル、データベース、ユーザーを作成する1.3 リモート...
Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な展開、コンテナ ...