首页 > 编程语言 > in notin exists not exists 性能优化算法总结

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

时间:2022-08-30 23:25:09浏览次数:58  
标签:notin exists 数据库 查询 索引 算法 SQL

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都可以转换成功

标签:notin,exists,数据库,查询,索引,算法,SQL
From: https://www.cnblogs.com/yizhiamumu/p/16641326.html

相关文章

  • 贪心算法(集合覆盖)
    1.应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号2.贪心算法介绍1)贪婪算法(......
  • 离线强化学习 Offline Reinforcement Learning 之 BEAR 算法
    BEARBootstrappingErrorAccumulationReduction时间:2019NIPSConferenceandWorkshoponNeuralInformationProcessingSystem题目:StabilizingOff-policyQ-Lear......
  • StatementCallback; bad SQL grammar [DROP TABLE IF EXISTS
    StatementCallback;badSQLgrammar[DROPTABLEIFEXISTS javaspringboot项目自动建表报错 在配置文件中,spring.datasource.url 后追加参数:allowMultiQueri......
  • js实现 LRU 算法
    方式一:map实现classLRU{constructor(size){this.size=size;this.cache=newMap();}get(key){if(this.cache.has(ke......
  • 最短路径算法-迪杰斯特拉(Dijkstra)算法在c#中的实现和生产应用
    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思想),直到扩展到终点为止......
  • rpc项目中的负载均衡算法
    一致性hash算法(根据IP一致性hash)一致性哈希策略的实现方式:我们先把服务列表中的地址进行哈希计算,把计算后的值放到哈希环上,接收到请求后,根据请求的固定属性值来进行哈希计......
  • 机器学习算法在 IRIS 数据集上的可视化与应用
    机器学习算法在IRIS数据集上的可视化与应用五eri集由3种鸢尾花(IrisSetosa、IrisVirginia、IrisVersicolar)组成,每个品种有50个样本,共有150个数据。该数据集......
  • 【Vue面试题】谈谈你对Vue的diff算法的理解
    1diff算法到底是什么?diff算法是一种通过同层的树节点进行比较的高效算法,它可以不用频繁操作DOM,而是选用虚拟DOM节点操作,说人话就是专门用来处理虚拟DOM节点的。2操作......
  • KNP算法
    1.应用场景-字符串匹配问题字符串匹配问题::1)有一个字符串str1=""算算法算法你算算法你算法你算你好"",和一个子串str2="算法你算"2)现在要判断str1是否含有str2,......
  • 算法提高课 第四章 数据结构之并查集
    一、并查集1250.格子游戏思路O(mlog(n))将图中的每个点看作并查集的结点,每个被画的边看作合并相邻的点的操作将图中所有点按行或列优先,从1~n*m进行编号每次进行......