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

推薦する

Dockerで最もよく使われるイメージコマンドとコンテナコマンドの詳細な説明

この記事では、Docker の使用で最もよく使用されるイメージ コマンドとコンテナ コマンドを一覧表...

Linux で rc.local ファイルがない場合の完璧なソリューション

新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...

Vue の this.$router と this.$route の違いと push() メソッド

公式文書には次のように記されている。ルーターを挿入することで、どのコンポーネントでも this.$r...

HTML ウェブページの段落レイアウトと改行

Web ページの外観はレイアウトに大きく左右されます。ページ内に長い段落のテキストがある場合、通常は...

Vueはボールのスライディングクロス効果を実現します

この記事の例では、ボールのスライドとクロスの効果を実現するためのVueの具体的なコードを共有していま...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

CSS スタイルを変更してグレーの Web ページ (色なし、明るい白黒のみ) を実現するいくつかの方法

通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...

Docker-compose におけるdepends_on 順序問題を解決する方法についての簡単な説明

コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...

MySQL 8.0 の新しいリレーショナル データベース機能の詳細な説明

序文MySQL 8.0 の最新バージョンは 8.0.4 rc であり、正式版は近日中にリリースされる...

dockerでデプロイされたjenkinsでgitプログラムを実行する際の問題について

1. まず、gitを関連付けるときにエラーメッセージが報告されます: エラー: ビルドするリビジョン...

Vue3 の ref と toRef の違いを簡単に分析します

1. refがコピーされ、ビューが更新されますrefを使用してオブジェクトのプロパティ値をレスポンシ...

MySQL 検査スクリプト (必読)

以下のように表示されます。 #!/usr/bin/env python3.5 psutilをインポー...

MySQL MGR の利点は何ですか?

MGR (MySQL グループ レプリケーション) は、バージョン 5.7 で追加された新しい機能...

マークアップ言語 - タイトル

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)

最近友人からDockerを触ったことがあるかと聞かれました。あまり自信がなかったので答えられませんで...