首页 数据库 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由谷歌DeepMind和蒙特利尔大学共同提出,目前数据和代码均已开源。最高可取得人类

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