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 でルートをジャンプする方法をご存知ですか?

推薦する

Linux にバイナリ MySQL をインストールして MySQL パスワードをクラックする方法

1. システムに必要な libaio ソフトウェアがインストールされていることを確認します。インスト...

Docker を使用した Laravel アプリケーションのデプロイ例

この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...

HTMLのマーキータグは、シームレスなスクロールマーキー効果を実現します。

<marquee> タグはペアで表示されるタグです。最初のタグ <marquee...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

ページリファクタリングスキル - コンテンツ

雑談はここまでにして、インターネット上で見つかる高性能な Yahoo ウェブサイトを構築するための数...

MySql のグループ化と各グループからランダムに 1 つのデータを取得する

アイデア: 最初にランダムに並べ替えてからグループ化します。 1. テーブルを作成します。 テーブル...

Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT

序文Linux のファイルまたはディレクトリの権限については、共通の rwx 権限を知っておく必要が...

Jsonフォーマットの詳細な説明

目次JSON は次の 2 つの構造に基づいて構築されます。 2. JSON形式1. オブジェクト2....

Vue は水の波紋効果のクリックフィードバック指示を実装します

目次水波効果実装を見てみましょう水の波紋のデフォルトスタイルをカスタマイズする水の波紋の位置と直径を...

MySQLでTEXT/BLOB型を使用する際の注意点を詳しく説明します

1. TEXTとBLOBの違いTEXT ファミリと BLOB ファミリの唯一の違いは、BLOB 型は...

js 基本構文と Maven プロジェクト構成チュートリアル ケース

目次1. jsステートメント2番目、js配列3. js関数4. メイヴンV. 結論1. jsステート...

開発者にとって必須の Docker コマンドの概要

目次Docker入門Docker環境のインストールDockerイメージの共通コマンド検索ミラー画像を...

Vue開発の詳細な説明 ソートコンポーネントコード

目次 <テンプレート> <ul class="コンテナ">...

JavaScript CollectGarbage 関数の例

まず、メモリ解放の例を見てみましょう。 <スクリプト言語="JavaScript&q...

iframe を更新する 3 つの方法

コードをコピーコードは次のとおりです。 <iframe src="1.htm&quo...