序文
序文はありません、ナンセンスな話をしないでください、ただインタビューを始めてください
インタビュー開始
インタビュアー:インデックスとは
- インデックスはデータ構造であり、検索効率を向上させるデータ構造です。B +ツリー、ハッシュなど
インタビュアー:B +ツリーについてのあなたの理解について教えてください
- B +ツリーはバランスの取れたマルチブランチツリーです。Bツリーと比較すると、B +ツリーのデータにはリーフノードしかありません。リーフノードはリンクリストを形成するため、範囲クエリをサポートできます。B +ツリーのクエリ効率は次のとおりです。O(logH)、HはB +数の高さです。
インタビュアー:なぜInnoDBはBツリーの代わりにB +ツリーをインデックス構造として使用するのですか?
- まず、B +ツリーをBツリーと比較します。非リーフノードもデータを格納するため、非リーフノードはより少ないメモリページを格納できます。同じ量のデータでは、Bツリーの高さはB +ツリーの高さよりも高いため、より多くのIO時間が必要になり、Bツリーの全体的な効率がB +ツリーよりも遅くなります。
- Bツリーのリーフノードはリンクリストを形成しないため、Bツリーは範囲クエリをサポートしていません。
- B +ツリーのデータはリーフノードにあり、クエリのパフォーマンスはより安定しています。
インタビュアー:インデックスのカテゴリーは何ですか
- 主キーインデックス、非主キーインデックス(通常のインデックス、一意のインデックス、共同インデックス)
インタビュアー:主キーインデックスと非主キーインデックスの違いは何ですか?
- InnoDBでは、主キーインデックスはクラスター化インデックスとも呼ばれ、リーフノードはデータの行全体を格納します
- InnoDBでは、非主キーインデックスは二次インデックスとも呼ばれ、リーフノードのコンテンツは主キーの値です。
mysql> create table T(
id int primary key,
k int not null,
name varchar(16),
index (k))engine=InnoDB;
インタビュアー:フォームを返す方法を知っていますか?
- ステートメントがselect * from T(ID = 300)、つまり主キークエリメソッドの場合、IDのB +ツリーを検索するだけで済みます。
- 文がselect * from T(k = 3、つまり通常のインデックスクエリモード)の場合、最初にkインデックスツリーを検索し、ID 300の値を取得してから、IDインデックスツリーを再度検索する必要があります。このプロセスは、テーブルに戻ると呼ばれます。
- つまり、非主キーインデックスに基づくクエリでは、もう1つのインデックスツリーをスキャンする必要があります。したがって、アプリケーションで主キークエリを使用するようにしてください。
インタビュアー:ヒットインデックスの原則は?
- 「カバーリングインデックスの原則」または「左端のプレフィックスの原則」のいずれかを満たしている限り、インデックスを使用できます。
- 詳細については、MySQLインデックスの使用規則を参照してください。
インタビュアー:カバーリングインデックスとは何ですか?
- インデックスをカバーするということは、クエリステートメントの実行は、データテーブルから読み取ることなく、インデックスからのみ取得できることを意味します。インデックスカバレッジが達成されたとも言えます。
インタビュアー:最後の質問、遅いクエリを解決する方法は?
- 問題を特定します。まず、遅いログを照会して、どのSQLステートメントに遅い照会があるかを判別します。
- 問題を分析します。次に、SQLが遅くなる理由は一般に2つあります。1つはインデックスが使用されていないこと、もう1つは間違ったインデックスを使用していることです。
- 問題の解決:インデックスが使用されていない場合は、explainを使用してSQLステートメントを分析し、インデックスが使用されているかどうかを判断できます。インデックスを使用する場合、正しいインデックスを使用しますか?間違ったインデックスを使用する場合は、force index()を使用してインデックスの使用を強制します。インタビュアーが引き続き質問する場合、なぜ間違ったインデックスを使用したのですか?簡単に言えば、InnoDBが使用するインデックスは値に基づいて決定され、この値はサンプル値に基づいて計算されます。サンプルであるため、サンプリングは比較的ランダムであり、間違いを犯すことは不可能ではありません。
インタビュアー:インタビューの最後に次のインタビューラウンドに入って、おめでとうございます
総括する
実際、インデックスに関する知識ポイントはまだたくさんありますが、ここでは詳しく説明しません。
- インデックス作成に選択するフィールド
- インデックスプッシュダウン
- 説明フィールドの意味、フィールドに応じた調整方法
トーク
これを見ていただきありがとうございます。記事がうまく書かれていると思われる場合は、それに注意を払い、共有してください(私にとって非常に便利です)。
記事を改善する必要があるとお考えの場合は、ご提案をお待ちしております。メッセージを残してください。
あなたが何かを見たいのなら、私はあなたのメッセージを楽しみにしています。
あなたのサポートとサポートは私の創造の最大の動機です!
参照
- 「高性能MySQL」
- 「MYSQL実際の戦闘に関する45の講義」