ホームページ データベース mysql チュートリアル sql中 in , not in , exists , not exists效率分析_MySQL

sql中 in , not in , exists , not exists效率分析_MySQL

May 30, 2016 pm 05:09 PM
効率

in和exists执行时,in是先执行子查询中的查询,然后再执行主查询。而exists查询它是先执行主查询,即外层表的查询,然后再执行子查询。

 

exists 和 in 在执行时效率单从执行时间来说差不多,exists要稍微优于in。在使用时一般应该是用exists而不用in

 

如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。IN时不对NULL进行处理。

 

not exists 和 not in 比较时,not exists 的效率比较高。

 

为了说明测试结果,我把emp1表中的数据到了315392条。emp2中删除只有2条件数据。测试的依据是执行的时间来说明的。

 

emp1中的数据记录情况。

 

SQL> select count(*) from emp1;

 

  COUNT(*)

 

----------

 

315392

 

emp2中的数据记录情况:

 

SQL> select count(*) from emp2;

 

 

 

  COUNT(*)

 

----------

 

   2

 

1、  执行exists查询,要求在emp1中查询出所有存在于emp2的数据总数

 

 SQL> select count(*) from emp1 where exists ( select null from emp2 where emp1.ename = emp2.ename);

 

  COUNT(*)

 

----------

 

     45056

 

执行次数十次,最大的一次为0.125S

 

2、    使用not exists查询出所在不在emp2中的数据总数

 

SQL> select count(*) from emp1 where not exists ( select null from emp2 where emp1.ename = emp2.ename);

 

     COUNT(*)

 

----------

 

270336

 

执行次数十次,最大的一次为0.141S

 

3、执行in 查询,要求在emp1中查询出所有存在于emp2的数据总数

 

SQL> select count(*) from emp1 where ename in ( select ename from emp2);

 

  COUNT(*)

 

----------

 

     45056

 

执行十次,最大的一次为0.141S

 

4、使用not in查询出所在不在emp2中的数据总数

 

SQL> select count(*) from emp1 where ename not in ( select ename from emp2 );

 

  COUNT(*)

 

----------

 

270336

 

执行十次,最长一次为0.328S

 

5、使用in查询,调用外层与子查询的位置,要求查询出存在于emp2中,且存在于emp1中的数据记录数

 

SQL> select count(*) from emp2 where ename in (select ename from emp1 );

 

  COUNT(*)

 

----------

 

 2

 

执行次数十次,最长的一次为0.047S

 

6、使用exists查询,调用外层与子查询的位置,要求查询出存在于emp2中,且存在于emp1中的数据记录数

 

SQL> select count(*) from emp2 where ename in (select ename from emp1 );

 

  COUNT(*)

 

----------

 

 2

 

执行次数十次,最长的一次为0.047S

 

综上所述:在使用in 和 exists时,个人觉得,效率差不多。而在not in 和 not exists比较时,not exists的效率要比not in的效率要高。

 

当使用in时,子查询where条件不受外层的影响,自动优化会转成exist语句,它的效率和exist一样。(没有验证)

 

如select * from t1 where f1 in (select f1 from t2 where t2.fx='x') 这时,认为in 和 exists效率一样。

 

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 でアプリまたはプロセスの生産性モードをオンまたはオフにする方法 Windows 11 でアプリまたはプロセスの生産性モードをオンまたはオフにする方法 Apr 14, 2023 pm 09:46 PM

Windows 11 22H2 の新しいタスク マネージャーは、パワー ユーザーにとって有益です。実行中のプロセス、タスク、サービス、ハードウェア コンポーネントを監視するための追加データにより、より優れた UI エクスペリエンスが提供されるようになりました。新しいタスク マネージャーを使用している場合は、新しい生産性モードに気づいたかもしれません。それは何ですか? Windows 11 システムのパフォーマンスの向上に役立ちますか?確認してみましょう! Windows 11 の生産性モードとは何ですか?生産性モードはタスク マネージャーのタスクの 1 つです

2時間で人間を超える! DeepMind の最新 AI が 26 の Atari ゲームをスピードランします 2時間で人間を超える! DeepMind の最新 AI が 26 の Atari ゲームをスピードランします Jul 03, 2023 pm 08:57 PM

DeepMind の AI エージェントが再び稼働します。注目してください、BBF という名前のこの男は、わずか 2 時間で 26 個の Atari ゲームをマスターしました。彼の効率は人間と同等であり、すべての先任者を上回っています。ご存知のとおり、AI エージェントは強化学習を通じて問題を解決するのに常に効果的ですが、最大の問題は、この方法が非常に非効率で、探索に長い時間がかかることです。画像 BBF によってもたらされた画期的な進歩は、効率の点にあります。フルネームが Bigger、Better、Faster と呼ばれるのも不思議ではありません。さらに、トレーニングは 1 枚のカードだけで完了でき、必要な計算能力も大幅に削減されます。 BBF は Google DeepMind とモントリオール大学によって共同提案され、データとコードは現在オープンソースです。到達可能な最高の人間

PyCharm リモート開発実践ガイド: 開発効率の向上 PyCharm リモート開発実践ガイド: 開発効率の向上 Feb 23, 2024 pm 01:30 PM

PyCharm は、コードの作成、デバッグ、プロジェクト管理のために Python 開発者によって広く使用されている強力な Python 統合開発環境 (IDE) です。実際の開発プロセスでは、ほとんどの開発者は、開発効率を向上させる方法、チームメンバーと開発にどのように協力するかなど、さまざまな問題に直面します。この記事では、開発者がリモート開発で PyCharm をより効果的に使用し、作業効率を向上させるのに役立つ、PyCharm のリモート開発の実践的なガイドを紹介します。 1. PyChでの準備作業

AI描画で遊ぶStable Diffusionのプライベート展開 AI描画で遊ぶStable Diffusionのプライベート展開 Mar 12, 2024 pm 05:49 PM

StableDiffusion はオープンソースの深層学習モデルで、主な機能はテキスト記述を通じて高品質な画像を生成することであり、グラフ生成、モデルの結合、モデルのトレーニングなどの機能をサポートしています。このモデルの操作インターフェイスは次の図に示されています。画像の生成方法. 以下は、水を飲む鹿の画像を作成するプロセスの紹介です. 画像を生成する際には、プロンプトワードとネガティブプロンプトワードに分けられます. プロンプトワードを入力する際に​​は、それを説明する必要があります希望するシーン、オブジェクト、スタイル、色を明確に説明してください。たとえば、単に「鹿が水を飲む」と言うのではなく、「小川があり、鬱蒼とした木の隣にあり、その小川の隣に鹿が水を飲んでいます」と言うと、否定的なプロンプトの言葉が逆の方向になります。例:建物も人も橋も柵もありません。また、説明が曖昧すぎると不正確な結果が生じる可能性があります。

Microsoft Edgeで省電力モードをオンにするにはどうすればよいですか? Microsoft Edgeで省電力モードをオンにするにはどうすればよいですか? Apr 20, 2023 pm 08:22 PM

Edge などの Chromium ベースのブラウザーは多くのリソースを使用しますが、Microsoft Edge で効率モードを有効にしてパフォーマンスを向上させることができます。 Microsoft Edge Web ブラウザーは、そのささやかな始まりから長い道のりを歩んできました。最近、Microsoft は、PC 上のブラウザの全体的なパフォーマンスを向上させるように設計された新しい効率モードをブラウザに追加しました。効率モードは、バッテリー寿命を延ばし、システム リソースの使用量を削減します。たとえば、Google Chrome や Microsoft Edge など、Chromium で構築されたブラウザは、RAM と CPU サイクルを大量に消費することで有名です。したがって、順番に

Pythonをマスターして仕事の効率と生活の質を向上させましょう Pythonをマスターして仕事の効率と生活の質を向上させましょう Feb 18, 2024 pm 05:57 PM

タイトル: Python は生活をより便利にします: この言語をマスターして仕事の効率と生活の質を向上させましょう 強力で学びやすいプログラミング言語として、Python は今日のデジタル時代にますます人気が高まっています。 Python は、プログラムを作成したりデータ分析を実行したりするためだけでなく、私たちの日常生活でも大きな役割を果たします。この言語をマスターすると、仕事の効率が向上するだけでなく、生活の質も向上します。この記事では、具体的なコード例を使用して、日常生活における Python の幅広い応用例を示し、読者の役に立つようにします。

Scrapy がどのようにしてクローリングの安定性とクローリングの効率を向上させるのか Scrapy がどのようにしてクローリングの安定性とクローリングの効率を向上させるのか Jun 23, 2023 am 08:38 AM

Scrapy は、Python で書かれた強力な Web クローラー フレームワークで、ユーザーがインターネットから必要な情報を迅速かつ効率的にクロールできるようにします。ただし、Scrapy を使用してクロールを行う過程で、クロールの失敗、データの不完全、クロール速度の遅さなど、クローラーの効率と安定性に影響を与える問題が発生することがよくあります。したがって、この記事では、Scrapy がクローリングの安定性とクローリングの効率をどのように向上させるかを検討します。 Webをクローリングする際にリクエストヘッダーとUser-Agentを設定し、

フロントエンドの開発効率を向上させるためのセッションストレージの使用方法を学ぶ フロントエンドの開発効率を向上させるためのセッションストレージの使用方法を学ぶ Jan 13, 2024 am 11:56 AM

sessionStorage の役割をマスターし、フロントエンド開発の効率を向上させるには、具体的なコード例が必要です インターネットの急速な発展に伴い、フロントエンド開発の現場も日々変化しています。フロントエンド開発を行う場合、多くの場合、大量のデータを処理し、後で使用するためにブラウザに保存する必要があります。 SessionStorage は、一時的なローカル ストレージ ソリューションを提供し、開発効率を向上させる非常に重要なフロントエンド開発ツールです。この記事ではsessionStorageの役割を紹介します。

See all articles