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 Stack 展開方法の手順

Docker はますます成熟し、その機能もますます強力になっています。 Docker Stack を...

WeChatアプレットを少なく使う方法(最適な方法)

序文私は less/sass を書くことに慣れていますが、小さなプログラムを開発するときには、まだ ...

Linuxサーバーのファイアウォールを変更してポートへのリモートアクセスを許可する方法

1. 問題の説明セキュリティ上の理由から、新しく構築されたサーバー クラスターでは、指定されたポート...

axiosリクエストをvueでカプセル化する方法

実際、Vueでaxiosをカプセル化するのは非常に簡単ですまず、srcパスにhttpフォルダを作成し...

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

導入mysql-utilities ツールセットは、DBA のツールボックスとも言えるさまざまなツー...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

MySQLユーザー権限管理の詳細な説明

目次序文: 1. ユーザー権利の概要2. 実際の権限管理序文:データベースのユーザー権限管理について...

TortoiseSvn Little Turtle インストール 最新の詳細なグラフィックチュートリアル

tortoiseGit のインストール時にいつも問題があったので、単純に svn に変更しました。途...

MySQL 数値型オーバーフローの処理方法

さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...

ラムダ式の原則と例

ラムダ式ラムダ式 (クロージャとも呼ばれる) は、Java 8 のリリースを推進した最も重要な新機能...

要素の読み込み効果を実現するための純粋なHTML+CSS

これは Element UI の読み込みコンポーネントのエフェクトです。かっこいいですね。実装してみ...

DOCTYPE要素詳細説明完全版

1. 概要この記事では、DOCTYPE要素を体系的に説明します。同時に、多くの情報を調べました。イン...

Docker CPU 制限の実装

1. --cpu=<値> 1) コンテナが使用できるCPUリソースの量を指定しますが、コ...

実用的な基本的な Linux sed コマンドのサンプルコード

Linux ストリーム エディターは、データ センターでスクリプトを実行するのに便利な方法です。これ...

ウェブデザインにおける2種類のタブアプリケーション

現在、Web デザインではタブが広く使用されていますが、一般的に次の 2 つのタイプに分けられます。...