結合アルゴリズムMySQL は Nested-Loop Join という 1 つの結合アルゴリズムのみをサポートしていますが、Nested-Loop Join には 3 つのバリエーションがあります。
駆動テーブルと非駆動テーブルの違い駆動テーブルがメインテーブル、非駆動テーブルがスレーブテーブルです。次のSQLを見るとわかります。Aが駆動テーブル、Bが非駆動テーブルです。 Aから*を選択し、Bを左結合する A が B に結合する場合、最初にテーブル A をチェックし、次にテーブル B をチェックする必要がありますか? 答えは必ずしもそうではありません。MySQL にはオプティマイザが内蔵されており、クエリ ステートメントに基づいて最適化が行われます。オプティマイザは最初にチェックするテーブルも決定しますが、最初にチェックされるテーブルが駆動テーブルであることは確かであり、その逆も同様です。最初にチェックするテーブルについては、実行プランを確認することで結果を得ることができます。前に explain キーワードを追加するだけです。 A から * を選択して B に参加させる; を説明します。 1. 単純なネストループ結合、単純なネスト、インデックスなし左結合 B: 毎回、テーブル全体が一致します。テーブル A のデータの各行は、テーブル B で 1 回一致します。つまり、テーブル A に 10 個のレコードがあり、テーブル B に 1000 個のレコードがある場合、クエリ中のスキャン回数は 10 * 1000 となり、クエリはデータを取得するために 10000 回スキャンする必要があることを意味します。 2. インデックスネストループ結合インデックスケースselect * from A join B on A.id=B.id where A.id = 1: クエリを実行すると、ドライバー テーブル A は関連付けられているフィールドのインデックスに従って検索します。インデックスに一致する値が見つかると、クエリがテーブルに返されます。つまり、インデックスが一致した後にのみ、クエリがテーブルに返されます。 3. ブロックネストループ結合、結合バッファインデックスがある場合は、インデックス ネスト ループ結合を使用してテーブルを結合します。結合列にインデックスがない場合は、ブロック ネスト ループ結合が使用されます。結合バッファー。ドライバー テーブルと非ドライバー テーブルの間にはバッファーがあります。クエリを実行すると、ドライバー テーブルのデータが最初にバッファーにキャッシュされ、次に非ドライバー テーブルと一括して照合されます。これは、複数の比較を 1 つの比較に結合する最適化ソリューションです。注: ここでは、関連付けられたテーブルの列だけでなく、選択後の列もキャッシュされます。 バッファサイズデフォルトでは、バッファ join_biffer_size の容量は 256k です。データ スペースが 256k より大きい場合、バッファは使用できず、結合は最も単純な Simple Nested-Loop Join に変換されます。ただし、大量のデータをロードするためにバッファ サイズを手動で調整できます。join_biffer_size sql を表示します: show variables like '%join_biffer_size%' 大量データと少量データを持つテーブルの接続順序を選択する方法小さいテーブルを大きいテーブルに接続するのが最適です。これにより、スキャン回数が減ります。たとえば、大きいテーブルに 1,000 のデータ レコードがあり、小さいテーブルに 10 のデータ レコードしかない場合、最適な接続方法は、小さいテーブルを大きいテーブルに結合することです。なぜこのようにするのでしょうか。
詳細
これで、MySQL 結合の基本原理に関するこの記事は終了です。MySQL 結合の基本原理の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: CSSスタイルで実現されるHTML背景色のグラデーション効果
シナリオ1. ID番号のフィールドを備えた市民システムを維持する2. ビジネス コードでは、重複する...
目次1. 制約の概念と分類2. 5つの制約の追加と削除2.1 制約を追加する6つの方法2.2 制約を...
今日、CSDN の Q&A セクションで友人が質問をしているのを見ました。彼は 1 次元配列...
はじめに:ナビゲーション バーなどのコンポーネント ベースのアイデアを使用して機能モジュールを完全に...
目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...
目次結合構文: 1. InnerJOIN: (内部結合) 2. LeftJOIN: (左結合) 3....
1. 何ですかコンポーネント間の通信は、次の 2 つの単語に分けることができます。コンポーネントコ...
目次単一ノード差分単一要素を調整するマルチノード差分調整子配列ノードが移動したかどうかを判断するには...
一般的に言えば、HTML ドキュメント内で極端に大きな <ol> リストに遭遇する可能性...
ここでは、Jenkins コンテナを例に 3 つの方法を紹介します。方法1コンテナをイメージにパッケ...
1.MySQLレプリケーションの概念これは、プライマリ データベースの DDL および DML 操作...
書き順の重要性ブラウザのリフローを減らし、ブラウザのDOMレンダリングパフォーマンスを向上させる①:...
フロントエンドは、技術が急速に進化するだけでなく、知っておくべき事柄が多すぎるという理由で大変な仕事...
最近データベースを学び始めたのですが、とても興味深いコースだと感じていますが、含まれる内容の多くは私...
登録するフロントエンドは、vue の axios を使用して値を渡し、取得したアカウントとパスワード...