序文 インデックスは、データベース内の 1 つ以上の列の値を並べ替え、データベースが効率的にデータを取得するのに役立つデータ構造です。 たとえて言うと、データベースのインデックスは本の目次に相当します。本の中の知識ポイントを見つけたいとき、本のすべてのページを検索する代わりに、目次で直接探すことができます。しかし、これはインデックスの欠点でもあります。データベースを変更するとき、インデックスの変更にはより多くの時間がかかります。 しかし、MySQL インデックスを本当に理解していますか?これらの質問は、インデックスに関するいくつかの重要な知識ポイントを理解するのに役立ちます。 1. 最左接頭辞原理とは何ですか? 以下の回答はすべてMySQLのInnoDBエンジンに基づいています 例えば次の表の場合 B+ツリー構造を使用して名前フィールドに基づいてインデックスを作成すると、おおよそのインデックス構造は次のようになります。 名前が「张」で始まるすべての人のIDを見つけるためにあいまい検索を実行したい場合、SQL文は次のようになります。 名前が「张%」のようなテーブルから ID を選択 B+ ツリー構造インデックスでは、インデックス項目はインデックス定義に表示されるフィールドの順序に従ってソートされます。検索時に、インデックスは ID が 100 の Zhang Yi をすばやく見つけ、条件が満たされなくなるまで、名前が Zhang で始まるすべての人物を右に直接移動します。 つまり、条件を満たす最初の人を見つけたら、そのまま右にトラバースすることができます。インデックスは順序付けされているため、条件を満たすすべての人が集められます。 左に配置してから右に移動するこの方法は、最左接頭辞原則と呼ばれます。 2. インデックスとしてハッシュ テーブルではなく B+ ツリーを使用するのはなぜですか? 1. ハッシュ テーブルは、インデックス フィールドを対応するハッシュ コードにマッピングし、対応する位置に格納します。このように、あいまい検索を実行する場合、ハッシュ テーブル構造は明らかにサポートされておらず、テーブルをトラバースすることしかできません。 B+ ツリーは、最左プレフィックス原理を通じて対応するデータをすばやく見つけることができます。 2. 100 から 400 までの ID を持つ人を検索するなど、範囲検索を実行する場合、ハッシュ テーブルはこれをサポートしていないため、テーブル全体を走査することしかできません。 3. インデックス フィールドはハッシュ化によってハッシュ コードにマップされます。多数のフィールドが同じ値のハッシュ コードにマップされると、結果として得られるインデックス構造は非常に長いリンク リストになり、検索時間が大幅に増加します。 3. 主キー インデックスと非主キー インデックスの違いは何ですか? たとえば、次のテーブルの場合 (実際には、上記のテーブルに k フィールドが追加されています)、ID が主キーになります。 主キーインデックスと非主キーインデックスの概略図は次のとおりです。 ここで、R は行全体の値を表します。 図から、主キー インデックスと非主キー インデックスの違いは、非主キー インデックスのリーフ ノードには主キー値が格納され、主キー インデックスのリーフ ノードにはデータの行全体が格納されることであることが簡単にわかります。非主キー インデックスはセカンダリ インデックスとも呼ばれ、主キー インデックスはクラスター化インデックスとも呼ばれます。 これら 2 つの構造に基づいてクエリを実行し、クエリの違いを確認してみましょう。 1. クエリ ステートメントが 2. クエリ ステートメントが さて、それらの違いがわかりますか? 4. 自動増分主キー インデックスの使用が推奨されるのはなぜですか? この主キーインデックスツリーでは ID = 650 のデータ行を挿入する場合は、右端に挿入するだけです。 ただし、ID = 350 のデータ行を挿入する場合、B+ ツリーは順序付けされているため、ID = 350 のデータを挿入するためのスペースを確保するために、下のリーフ ノードを移動する必要があり、時間がかかります。R4 が配置されているデータ ページがいっぱいの場合は、ページ分割操作が必要になり、さらに状況が悪化します。 ただし、主キーが自動増分である場合、挿入される各 ID は前の ID よりも大きくなるため、位置を移動したり分割したりせずに、毎回最後に挿入するだけで済み、パフォーマンスが向上します。そのため、自動インクリメント主キーを持つインデックスを使用することをお勧めします。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vue3 での watchEffect の使用に関する簡単な分析
>>: Ubuntu 16.04.5LTS に SVN をインストールする手順
証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...
この記事の例では、参考までに簡単な虫眼鏡効果を実現するためのjsの具体的なコードを共有しています。具...
html、address、blockquote、body、dd、div、dl、dt、fieldset...
この記事の例では、ページング効果を実現するためのvue+Elementの具体的なコードを参考までに共...
準備Windows Server 2008 R2 Enterprise (2.40GH、8GB、64...
最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...
効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...
bgcolor="テキストの色" background="背景画像&q...
フロントエンド プロジェクトとバックエンド プロジェクトは分離されており、フロントエンドとバックエン...
Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...
かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...
「/」はルートディレクトリ、「~」はホームディレクトリです。 Linux ストレージはツリー状にマウ...
1. PAM設定ファイルを編集する sudo vim /etc/pam.d/ログイン2行目に以下を...
この記事では、MySQL 8.0.15をダウンロードしてインストールするための具体的な手順を参考まで...
構造擬似クラスセレクタの紹介構造擬似クラスセレクターは、いくつかの特殊効果を処理するために使用されま...