結合では、ネスト ループ結合アルゴリズムが使用されます。ネスト ループ結合には 3 つの種類があります。 t1 から * を選択し、t2 を t1.a = t2.a で結合します。 -- a 100 データ項目、b 1000 データ項目 単純なネストループ結合テーブル t1 全体が走査されます。T1 は駆動テーブルとして使用されます。t1 の各データは、t2 のテーブル全体で照会されます。このプロセスは 100*1000 回比較されます。 t2 でフル テーブル クエリが実行されるたびに、フル テーブル スキャンがメモリ内で実行されるとは限らず、バッファー プールが削除され、ディスク上に配置される可能性があります。 ブロックネストループ結合(MySQL ドライバーリンクはインデックスを使用しません)t1 テーブル全体を走査し、t1 データを join_buffer にロードし、次に t2 テーブル全体を走査して、t2 の各データを join_buffer の t1 にキャッシュされたデータと一致させます。 t1 フルテーブルスキャン = 100 回 t2 フルテーブルスキャン = 1000 回 クエリ数 = 1100 join_bufferでの比較 = 100 * 1000回 比較回数は Simple Nested-Loop Join と同じですが、比較処理は Simple Nested-Loop Join よりもはるかに高速で、パフォーマンスも向上します。 join_buffer にはサイズがあります。t1 で見つかったデータが join_buffer のサイズより大きい場合、t1 のデータの一部が最初にロードされます。t2 を比較した後、join_buffer はクリアされ、t1 の残りのデータがロードされます。ロードが不完全な場合は、操作が繰り返されます。 t1 のフル テーブル スキャンの数は join_buffer 1 の数と同じままですが、t2 のスキャンの数はセグメントの数で乗算されます。 駆動テーブルのデータ行数は N であり、アルゴリズム プロセスを完了するにはこれを K セグメントに分割する必要があり、駆動テーブルのデータ行数は M であると仮定します。 K = λ * N 駆動テーブルをスキャンする回数 = M * λ * N λ は join_buffer のサイズに関係します。join_buffer のサイズが十分に大きい場合、大きなテーブル ドライバーと小さなテーブル ドライバーの時間は同じになります。 セグメンテーションが必要な場合、セグメンテーション回数が少ないほど、駆動テーブルがスキャンされる回数が少なくなるため、小さなテーブル ドライバーを使用する必要があります。 インデックス ネスト ループ結合 (MySQL ドライバー リンクはインデックスを使用します)フィールド a がインデックス付けされている場合の上記の SQL を例に挙げてみましょう。 t1 テーブル全体がスキャンされ、t1 テーブルの各データが t2 テーブルにインデックスされます。ID が見つかった後、テーブルが再度クエリされます (接続フィールドが t2 テーブルの主キーである場合、テーブル取得操作は省略されます)。 t1はテーブル全体を100回スキャンします t2 インデックスクエリ = log1000 回 t2 テーブルクエリ = log1000 回 駆動テーブルのデータ行数が N で、駆動テーブルのデータ行数が M であると仮定します。 クエリの総数 = N + N * 2logM 上記からわかるように、駆動テーブル内のデータが大きくなるほどクエリの数も増えるため、駆動テーブルとしては小さなテーブルを使用する必要があります。 この記事は「MySQL実践45講義-講義34」について言及しています。 要約するMYSQL データベースの結合操作原理の基本に関するこの記事はこれで終わりです。MYSQL 結合原理に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様の今後の 123WORDPRESS.COM へのご支援を心より願っております。 以下もご興味があるかもしれません:
|
<<: HTMLポップアップdivはモバイルの中央揃えを実現するのに非常に便利です
>>: Linux ドライバ開発でよく使われる関数 copy_from_user open read write の詳細な説明
目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...
目次1. ユーザーとユーザーグループの重要性1) ユーザーの存在意義2) ユーザーグループの重要性2...
MySQL は、ユーザーごとに 2 つの異なるバージョンを提供します。 MySQL コミュニティ サ...
1. ダウンロードアドレス: mysql-8.0.17-winx64ダウンロードして解凍する2. フ...
この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...
mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...
序文WeChat アプレット開発 (ネイティブ wxml、wxcss) で、{{ }} 内で直接メソ...
DockerイメージからDockerfileを取得する docker 履歴 --format {{....
MySQL インストール ファイルには、msi 形式と zip 形式の 2 種類があります。クリック...
Vueカードのフリップカルーセル表示、フリップ時にデータを切り替えながら、参考までに、具体的な内容は...
一般的なアプリケーションシナリオ現在のアプリのインターフェースは基本的に同じであり、グリッドレイアウ...
Docker を使用して MySQL イメージをプルしようとして 30 分経っても失敗したため、代わ...
HTTP ステータス コードステータス コードは 3 桁の数字と理由フレーズ (最も一般的なもの: ...
データベースコマンド仕様すべてのデータベース オブジェクト名には小文字を使用し、アンダースコアで区切...
目次1. リクエストを取得する: 2. 投稿リクエスト: 3. 拡張と補足Vue スキャフォールディ...