in notin exists not exists 性能优化算法总结

  • 1.1. in 和 exists 区别
  • 1.2. not in 能不能走索引
  • 1.3. not in 和 join 的关系
  • 1.4. 和 not Exists 的关系
  • 1.5. in 的实现过程

1.1. in 和 exists 区别

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

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

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

IN 不对NULL进行处理。

1.2. not in 能不能走索引

答案是有些可以有些不可以。

排除少量情况下 ,not in 基本就是等同遍历了。

如果排除上万数据,那走走索引还是有用的,排除的数据越多,走索引效果越好。具体的实现实现效果和数据库类型和版本相关。一般越高级数据库与版本会对此优化越好。。

如果遇到相关数据库对此语句优化不好,那就需要利用适当调整sql语句,换个等义的更高性能写法(一般可读性会因此下降) 或者利用存储过程自定义函数等自己实现性能高的notin算法,或者用编程语言实现

1.3. not in 和join 的关系

虽然not in 里面排除多的情况下可以走索引,但数据库具体实现可能没有实现,此时可以使用join 代替代价就是可读性相对会下降写。

优先使用not in,其次join 代替 可读性优先保证

1.4. 和 not Exists 的关系

含义上说 notin 基本就是notexist 也有可能是sql标准,待确定有可能不同的数据库

区分是为了实现俩种不同的查询算法 有些数据库俩种算法几乎一样效率,有些数据库实现的不一样。。

而且数据量大小不同的情况下,可能会走不同的路径,不能一概而论。。

1.5. in 的实现过程

用in 写出来的SQL 的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用in 的SQL 性能总是比较低的

从SQL执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:SQL试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。

可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功

in notin exists not exists 性能优化算法总结的更多相关文章

  1. web性能优化--算法优化(四)

    避免for-in 把数组长度保存在局部变量中 较少迭代次数(Duffs Device) 基于函数的循环比基于循环的迭代消耗性能更多 优化if-else,一般switch比if-else速度快(hash ...

  2. NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化

    参考文章:SQL SERVER性能优化综述(很好的总结,不要错过哦) 数据库:系统数据库 子查询的用法 子查询是一个 SELECT 查询,它嵌套在 SELECT.INSERT.UPDATE.DELET ...

  3. IN、EXISTS的相关子查询用INNER JOIN 代替--性能优化

    如果保证子查询没有重复 ,IN.EXISTS的相关子查询可以用INNER JOIN 代替.比如: IN.EXISTS的相关子查询用INNER JOIN 代替--sql2000性能优化

  4. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

  5. SQL Server-聚焦EXISTS AND IN性能分析(十六)

    前言 前面我们学习了NOT EXISTS和NOT IN的比较,当然少不了EXISTS和IN的比较,所以本节我们来学习EXISTS和IN的比较,简短的内容,深入的理解,Always to review ...

  6. 【转】oracle in和exists、not in和not exists原理和性能探究

    转自http://www.2cto.com/database/201310/251176.html 对于in和exists.not in和not exists还是有很多的人有疑惑,更有甚者禁用not ...

  7. parewise算法性能优化

    在<接口自动化测试框架-AIM>这篇博客中,提到了parewise算法. 这次对其进行性能优化,共3点. 一. 因为笛卡尔积和两两拆分,是有序的. 就保证了两两拆分后的每列都是相同位置的元 ...

  8. 数据库访问性能优化 Oracle

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  9. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  10. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

随机推荐

  1. SpringBoot 1.x 2.x配置文件指定服务项目名

    SpringBoot版本1.x: server.context-path=/demo SpringBoot版本2.x: server.servlet.context-path=/demo

  2. DASCTF X CBCTF 2023|无畏者先行 [PWN] WP

    DASCTF X CBCTF 2023|无畏者先行 [PWN] WP 1.GuestBook 题目保护情况 开启canary,nx保护 64位ida载入 首先可以通过输入0x18个垃圾数据可以通过打印 ...

  3. 开源免费又好用的中式数据报表:UReport2是一款高性能的架构在Spring之上纯Java报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。

    北润乾.南帆软,数加发力在云端. uReport 身何安?中式报表真开源. 报表江湖之中,uReport安身立命的产品品类定位是什么? 说来很简单,uReport的价值在于填补了这样一个市场空白:开源 ...

  4. Vue源码剖析

    目录 Vue 响应式数据 Vue 中如何进行依赖收集 Vue 中模板编译原理 Vue 生命周期钩子 Vue 组件 data 为什么必须是个函数? nextTick 原理 set 方法实现原理 虚拟 d ...

  5. CF1204A 题解

    洛谷链接&CF 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定一个二进制字符串 \(S\),求这个二进制数包含 \(4 ^ k\) 的个数. 特殊的:若 ...

  6. Jenkins 添加Linux固定代理节点

    实践环境 Jenkins 2.304 jdk-8u131-linux-x64.rpm centos-release-7-9.2009.1.el7.centos.x86_64 操作步骤 安装JDK 在预 ...

  7. gist.github.com 无法访问解决办法,亲测永远有效!

    1.打开https://www.ipaddress.com/,输入gist.github.com获取IP地址 2.ping 此ip地址,可以访问 3.将IP地址写入Hosts文件,140.82.113 ...

  8. mybatisplus轻松完成一次模糊+分页查询

    之前一直用mybatis+pageinfo完成模糊+分页查询,还需要手写sql语句,之前一直没做尝试,今天试了试mybatisplus一个人完成模糊+分页,挺简单的 有一个小插曲是,我的前端接受的da ...

  9. ambari2.8+ambari-metrics3.0+bigtop3.2编译、打包、安装

    bigtop编译 资源说明: 软件及代码镜像 开发包镜像 github访问 编译相关知识 技术知识 bigtop编译流程及经验总结 各模块编译难度及大概耗时(纯编译耗时,不包含下载文件和排错时间) c ...

  10. 【JS】04 DOM 文档对象模型 P1 查找元素、改变内容、绑定事件

    什么是DOM? Document Object Model 文档指的是HTML文档 当浏览器打开一个网页的时候,实际上把HTML文档读取到内存中进行解析 整个HTML文档被封装为document文档对 ...