MySQL における in と exists の違いの詳細な説明

MySQL における in と exists の違いの詳細な説明

ここに画像の説明を挿入

4. 存在し、

in と exists の違いは何ですか? どのような場合に in を使用し、どのような場合に exists を使用すればよいですか?

まずは公式を覚えて、その後で詳細について話しましょう! 「外部クエリ テーブルがサブクエリ テーブルより小さい場合は、exists を使用します。外部クエリ テーブルがサブクエリ テーブルより大きい場合は、in を使用します。外部テーブルとサブクエリ テーブルが類似している場合は、どちらか好きな方を使用します。

すでにお分かりかと思いますが、fruits テーブルのデータが非常に大きい場合、最大で 1 回だけ fruit テーブルのすべてのデータを走査するため、 での使用は適していません。

たとえば、suppliers テーブルに 10,000 件のレコードがあり、fruits テーブルに 1,000,000 件のレコードがある場合、実行可能なトラバーサルの最大回数は 10,000*1,000,000 回となり、非常に非効率的です。

たとえば、suppliers テーブルに 10,000 件のレコードがあり、fruits テーブルに 100 件のレコードがある場合、最大可能なトラバーサルは 10,000*100 回となり、トラバーサルの回数が大幅に削減され、効率が大幅に向上します。

ただし、suppliers テーブルには 10,000 件のレコードがあり、fruits テーブルには 100 件のレコードがある場合、exists() は依然として 10,000 回実行されます。in() はメモリ内をトラバースし、exists() はデータベースをクエリする必要があるため、10,000*100 回トラバースするには in() を使用する方が適切です。データベースをクエリするとパフォーマンスが高くなり、メモリの方が高速になることは周知の事実です。

したがって、覚えておかなければならないのは、「外部クエリ テーブルがサブクエリ テーブルより小さい場合は exists を使用し、外部クエリ テーブルがサブクエリ テーブルより大きい場合は in を使用し、外部テーブルとサブクエリ テーブルが類似している場合は、どちらか好きな方を使用する」という式だけです。

5. 存在しないし、存在しない

ここに画像の説明を挿入

exists と同様に、suppliers の id インデックスが使用され、exists() は fruit.length 回数実行され、exists() の結果セットはキャッシュされません。

ここに画像の説明を挿入

not in は本質的に!= and != ···と等しく、 != はインデックスを使用しないため、not in はインデックスを使用しません。

なぜインデックスを使用しないのですか?

データが 100 万個あり、s_id には 0 と 1 の 2 つの値しかないと仮定します。インデックスを使用するには、まずインデックス ファイルを読み取り、バイナリ検索を実行して対応するデータ ディスク ポインターを見つけ、読み取りポインターに基づいてディスク上の対応するデータを使用する必要があります。これは、500,000 の結果セットに影響します。この場合、直接のフル テーブル スキャンよりも速いのは明らかです。

s_id フィールドが一意の場合は、インデックスが使用されます。

インデックスを使用する必要がある場合は、force index を使用できますが、効率は向上せず、一般的に速度が低下します。

インデックスを適切に使用してください。カーディナリティは重要な指標です。カーディナリティが小さすぎると、インデックスがまったくないのと同じになり、スペースも無駄になります。

したがって、サプライヤーや果物の規模に関係なく、存在しないものを使用する方が効率的です。

MySQL の in と exists の違いについての詳細説明はこれで終わりです。MySQL の in と exists の違いについての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL における EXISTS と IN の使用法の比較
  • MySQL における exists、in、any の基本的な使い方
  • MySQL における in と exists の使い方と違いの紹介
  • MySQL ステートメントにおける IN と Exists の比較分析
  • MySQLの存在と詳細な説明と違い
  • MySQL の in クエリと exists クエリの違いの概要
  • MYSQL IN と EXISTS の最適化の例
  • mysql は、含まれていない、左結合、IS NULL、NOT EXISTS の効率の問題のレコードです

1. 事前に準備する

便宜上、ここで 2 つのテーブルを作成し、そこにいくつかのデータを追加します。

果物用のテーブル、サプライヤー用のテーブル。

フルーツテーブル フルーツテーブル

識別子名前価格
1 1りんご5
2 番アプリコット2
1 1 1ブラックベリー10
b2ベリー8
1 1カウント9

サプライヤーテーブル サプライヤーテーブル

s_id s_name
101
102ウォルマート
103カルフール
104中国資源先駆者

デモンストレーションにはこれら 2 つのテーブルを使用します。

2. 存在するもの

existsキーワードに続くパラメータは任意のサブクエリです。システムはサブクエリを操作して、行を返すかどうかを判断します。少なくとも 1 行が返された場合、 existsの結果はtrueとなり、外部クエリ ステートメントが照会されます。サブクエリが行を返さない場合、 existsの結果はfalseとなり、外部ステートメントは照会されません。

サブクエリがSELECT NULLの場合でも、MYSQL はそれをTrue見なすことに注意してください。

ここに画像の説明を挿入

ここに画像の説明を挿入

3. 何が

サブクエリに in キーワードを使用すると、内部クエリ ステートメントは 1 つのデータ列のみを返し、このデータ列の値は比較演算のために外部クエリ ステートメントに提供されます。

in キーワードをテストするために、 fruit テーブルに s_id 列を追加しました。

フルーツテーブル フルーツテーブル

識別子名前価格s_id
1 1りんご5 101
2 番アプリコット2 103
1 1 1ブラックベリー10 102
b2ベリー8 104
1 1カウント9 103

<<:  Dockerイメージの読み込み原理

>>:  Vue でルートをジャンプする方法をご存知ですか?

推薦する

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

Reactの仮想DOMとdiffアルゴリズムの詳細な説明

仮想DOMの役割まず、仮想 DOM の出現によってどのような問題が解決されるのかを知る必要があります...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

Vue 名前付きスロットの基本的な使用例

序文名前付きスロットは、スロット内の「name」属性を使用して要素にバインドされます。知らせ: 1....

MySQL データベースの集計クエリと結合クエリ操作

目次1. クエリ結果を挿入する2. 集計クエリ2.1 はじめに2.2 集計関数2.3 group b...

WeChatアプレットが検索ボックス機能を実装

この記事の例では、WeChatアプレットの検索ボックス機能を実装するための具体的なコードを参考までに...

Ubuntu 18.04の下のディレクトリにディスクをマウントします

導入この記事では、Ubuntu 18.04 デスクトップ システムでディスクを目的のディレクトリにマ...

VScode リモート SSH リモート編集とデバッグコード

Visual Studio Code の最新の Insider バージョンには、コードのリモート デ...

CSSがページのレンダリングをブロックするかどうかについての簡単な説明

おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...

docker compose helloworld を使い始めるための詳細なプロセス

前提条件Compose は、Docker コンテナをオーケストレーションするためのツールです。Doc...

CentOS 6 または CentOS 7 でディスク領域をクリアする方法

以下は、CentOS 6 または CentOS 7 サーバーのディスク領域をクリアするための簡単なコ...

DOSBox を起動後に自動的にコマンドを実行する方法

DOSBox を使用すると、Windows で DOS をシミュレートし、楽しい作業を行うことができ...

nginx リバース プロキシの魔法のスラッシュについての簡単な説明

nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...

MySQL における 10 進数型の使用法の簡単な紹介

MySQL でサポートされている浮動小数点型は、 FLOAT 、 DOUBLE 、およびDECIMA...