首頁 資料庫 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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在 Windows 11 中為應用程式或進程開啟或關閉效率模式 如何在 Windows 11 中為應用程式或進程開啟或關閉效率模式 Apr 14, 2023 pm 09:46 PM

Windows 11 22H2中的新工作管理員對進階使用者來說是個福音。現在,它透過附加資料提供更好的 UI 體驗,以密切關注您正在運行的流程、任務、服務和硬體元件。如果您一直在使用新的任務管理器,那麼您可能已經注意到新的效率模式。它是什麼?它是否有助於提高 Windows 11 系統的效能?讓我們來了解一下! Windows 11 中的效率模式是什麼?效率模式是任務管理器中的一

兩小時就能超過人類! DeepMind最新AI速通26款雅達利遊戲 兩小時就能超過人類! DeepMind最新AI速通26款雅達利遊戲 Jul 03, 2023 pm 08:57 PM

DeepMind的AI智能體,又來捲自己了!注意看,這個名叫BBF的傢伙,只用2個小時,就掌握了26款雅達利遊戲,效率和人類相當,超越了自己一眾前輩。要知道,AI智能體透過強化學習解決問題的效果一直都不錯,但最大的問題就在於這種方式效率很低,需要很長時間摸索。圖片而BBF帶來的突破正是在效率方面。怪不得它的全名可以叫Bigger、Better、Faster。而且它還能只在單卡上完成訓練,算力要求也降低許多。 BBF由GoogleDeepMind和蒙特婁大學共同提出,目前資料和程式碼都已開源。最高可取得人類

PyCharm遠端開發實用指南:提高開發效率 PyCharm遠端開發實用指南:提高開發效率 Feb 23, 2024 pm 01:30 PM

PyCharm是一款功能強大的Python整合開發環境(IDE),廣泛用於Python開發者進行程式碼編寫、除錯和專案管理。在實際的開發過程中,大多數開發者都會面臨不同的問題,例如如何提升開發效率、如何與團隊成員進行協作開發等。本文將介紹PyCharm遠端開發的實用指南,幫助開發者更好地利用PyCharm進行遠端開發,並提高工作效率。 1.準備工作在進行PyCh

私有化部署 Stable Diffusion 玩 AI 繪圖 私有化部署 Stable Diffusion 玩 AI 繪圖 Mar 12, 2024 pm 05:49 PM

StableDiffusion是一個開源的深度學習模型,其主要功能是透過文字描述來產生高品質的圖像,並支援圖生成、模型合併、以及模型訓練等功能。此模型的操作介面可以在下圖中看到。如何生圖下面介紹一下小鹿喝水的生圖過程,生成圖的時候分為提示詞和負面提示詞,輸入提示詞的時候要明確描述,盡量具體描述你想要的場景、對象、風格和顏色。例如,不僅僅說“小鹿喝水”,而是說“一條小溪,旁邊是茂密的樹,小溪旁有小鹿在喝水”,負面提示詞是反方向的例如:無建築物、無人物、無橋樑、無圍欄,而過於模糊的描述可能導致結果不

Java開發技巧大揭密:優化資料庫事務處理效率 Java開發技巧大揭密:優化資料庫事務處理效率 Nov 20, 2023 pm 03:13 PM

隨著網路的快速發展,資料庫的重要性日益凸顯。身為Java開發者,我們經常涉及資料庫操作,資料庫事務處理的效率直接關係到整個系統的效能和穩定性。本文將介紹一些Java開發中常用的最佳化資料庫事務處理效率的技巧,幫助開發者提升系統的效能和回應速度。在批次插入/更新操作通常情況下,一次插入或更新單一記錄到資料庫的效率遠低於批次操作。因此,在進行批量插入/更

如何在 Microsoft Edge 中開啟節能模式? 如何在 Microsoft Edge 中開啟節能模式? Apr 20, 2023 pm 08:22 PM

Edge等基於Chromium的瀏覽器會佔用很多資源,但您可以在MicrosoftEdge中啟用效率模式以提高效能。 MicrosoftEdge網頁瀏覽器自其不起眼的開始以來已經走過了漫長的道路。最近,微軟為瀏覽器添加了一種新的效率模式,旨在提高瀏覽器在PC上的整體效能。效率模式有助於延長電池壽命並減少系統資源使用。例如,使用Chromium建構的瀏覽器(如GoogleChrome和MicrosoftEdge)因佔用RAM和CPU週期而臭名昭著。因此,為了

掌握Python,提升工作效率與生活品質 掌握Python,提升工作效率與生活品質 Feb 18, 2024 pm 05:57 PM

標題:Python讓生活更方便:掌握這門語言,提升工作效率和生活品質Python作為一種強大而簡單易學的程式語言,在當今的數位時代越來越受到人們的青睞。不僅用於編寫程式和進行數據分析,Python還可以在我們的日常生活中發揮巨大的作用。掌握這門語言,不僅能提升工作效率,還能提升生活品質。本文將透過具體的程式碼範例,展示Python在生活中的廣泛應用,幫助閱讀

子網路遮罩:作用與網路通訊效率的影響 子網路遮罩:作用與網路通訊效率的影響 Dec 26, 2023 pm 04:28 PM

子網路遮罩的角色及其對網路通訊效率的影響引言:隨著網路的普及,網路通訊成為現代社會不可或缺的一部分。同時,網路通訊的效率也成為了人們關注的焦點之一。在建置和管理網路的過程中,子網路遮罩是一項重要且基礎的配置選項,它在網路通訊中起著關鍵的作用。本文將介紹子網路遮罩的作用,以及它對網路通訊效率的影響。一、子網路遮罩的定義及作用子網路遮罩(subnetmask)

See all articles