このノートでは、
少しずつ見ていくと、実はとても簡単に理解できます。 私の以前のメモを読んだことがあるなら、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ウェブサイト構築成功事例
この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...
1. Apacheをインストールする # yum インストール -y httpd httpd-de...
ページの説明: メインページ: 名前 —> shishengzuotanhuichaxun ...
目次序文1. NJSモジュールをインストールする方法1: NJSモジュールを動的にロードする方法2:...
この記事はRHEL7.5でのMySQL 8.0.11のインストールチュートリアルを記録しています。具...
HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...
Vue2+elementui のホバー プロンプトは、外部と内部に分かれています。内部のものは el...
目次1. 次のように、「rpm -ivh インストール パッケージ」コマンドを使用して rpm パッ...
1. 公式 Web サイトから MySQL 5.7 インストール パッケージ (mysql-5.7....
1. SpringBoootプロジェクトを作成し、jarパッケージにパッケージ化する2. Linux...
IE8.0の正式版をインストールしたので、基本的なCSS HACKをいくつかまとめてみました。We...
今日は新しいCSS特殊効果、波型ウォーターボール効果を学びました。これもとても美しいです HTML:...
1: readonly は、このコントロールをロックして、インターフェイス上で変更できないようにしま...
テトリスは非常に古典的な小さなゲームで、私もそれを書いてみました。しかし、できるだけ簡潔で論理的なコ...
Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...