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. BigDecimal加减乘除、比较

    // 加 a+b a.add(b); // 减 a-b a.subtract(b); // 乘 a*b a.multiply(b); // 除 a/b a.divide(b); // 绝对值 a.ab ...

  2. Java-文件下载案例

    文件下载需求 1.页面显示超链接 2.点击超链接后弹出下载框 3.完成图片文件下载 分析 1.超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框.不满足需求 2.任 ...

  3. P2P应用

    对等连接(peer to peer)文件分发的分析: 传统客户-服务器模式:用时与文件量成正比 P2P模式:随文件量增大而用时趋于一个极限. P2P工作方式有三: 集中式索引:客户访问服务器所需数据在 ...

  4. django 如何查询汇总的求和时避免没有数据导致的错误

    django 如何查询汇总的求和时避免没有数据导致的错误 在 Django 中,如果你希望对某个字段进行求和操作,并在没有数据时返回默认值,可以使用 aggregate 结合 Coalesce 函数. ...

  5. 第二章 编译FFmpeg并开启H.264编码

    目录 前言 1. 下载x264 2. 编译x264 3. 编译FFmpeg 3.1 可能出现的问题和解决方法 3.1.1 ERROR: x264 not found using pkg-config ...

  6. 第七节 JMeter基础-高级登录【数据驱动-参数化】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:一个接口的不同情况,其实就是请求参数不一样.期望结果不一样.把这些不一样的东西都提取出来进行管理,下次可以直接使用.因 ...

  7. 2024 暑假友谊赛 1 (7.13)zhaosang

    A-A https://vjudge.net/contest/638765#problem/A 一开始贪心做不出来,后面发现是dp找到转移方程即可,01dp问题 代码如下 #include <b ...

  8. jmeter目录结构含义

    backups :脚本备份目录.格式JMXbin目录∶存放Jmeter的启动脚本,配置文件.模块文件.jmeter.bat启动Jmeterjmeter.properties核心配置文件.docs:离线 ...

  9. 仓颉编程语言技术指南:嵌套函数、Lambda 表达式、闭包

    本文分享自华为云社区<[华为鸿蒙开发技术]仓颉编程语言技术指南[嵌套函数.Lambda 表达式.闭包]>,作者:柠檬味拥抱. 仓颉编程语言(Cangjie)是一种面向全场景应用开发的通用编 ...

  10. 简单认识APP项目

    manifests:里面只有一个xml,是app运行配置文件 清单文件 <?xml version="1.0" encoding="utf-8"?> ...