SQL中使用UNION ALL一定比OR效率高吗?
首先给出结论:SQL语句中使用UNION ALL取代OR不一定能够提升效率,具体情况要视情况而定
情况1. 连接字段较少,存在非索引字段,条件简单情况下
使用OR,进行一次全表扫描,不走cust_order_id的索引,执行时长:3273
使用UNION ALL,先走cust_order_id的索引,再进行全表扫描,反而用时更高.执行时长:3287
情况2: 连接字段较多,都是索引字段,条件简单情况下
使用OR,都走索引,耗时52
使用union all,都走索引,耗时43
结论:
union all 并不一定就比 or及in 快,要结合实际情况分析到底使用哪种情况。
对于索引列来最好使用union all,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引
对于只有非索引字段来说你就老老实实的用or 或者in,因为 非索引字段本来要全表扫描而union all 只成倍增加表扫描的次数
对于既有索引字段【索引字段有效】又包含非索引字段来时,按理你也使用or 、in或者union all 都可以,推荐使用or、in。
以上主要针对的是单表,而多表联合查询来说,考虑的地方就比较多了,比如连接方式,查询表数据量分布、索引等,再结合单表的策略选择合适的关键字
SQL中使用UNION ALL一定比OR效率高吗?相关推荐
- SQL中EXISTS与IN的使用及效率
in 和exists 对于以上两种查询条件,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询. 一直以来认为exists 比in 效率高 ...
- Sql中的union和union all的讲解
SQL UNION 和 UNION ALL操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相 ...
- sql中 in , not in , exists , not exists效率分析
in和exists执行时,in是先执行子查询中的查询,然后再执行主查询.而exists查询它是先执行主查询,即外层表的查询,然后再执行子查询. exists 和 in 在执行时效率单从执行时间来说差不 ...
- SQL Server中的Union和Union All语句之间的差异及其性能
SQL Server中的Union和Union All语句之间的差异及其性能 UNION vs UNION ALL 了解union和union all语句之间的差异及其性能. UNION UNION命 ...
- SQL中 UNION 和 UNION ALL 操作符小结
SQL中 UNION 和 UNION ALL 操作符小结1.UNION 和 UNION ALL 操作符用于合并两个或多个 SELECT 语句的结果集[适用场景] 2.UNION 和 UNION ALL ...
- 【SQL注入】 sql注入中的union和limt关键字的使用解析
[SQL注入] sql注入中的union和limt关键字的使用解析 我将用测试靶场做演示,拿下网站数据库来向你展示sql注入全过程和思路 一.首先要找到注入点 [http://rhiq8003.ia. ...
- SQL语句中:UNION与UNION ALL的区别
UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复 1.UNION 的语法如下:[SQL 语句 1]UNION[SQL 语句 2]2 ...
- SQL中的case when then else end用法
2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN ...
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候, ...
- fastreport.net 交叉表居中显示_浅析Sql中内连接、外连接、全连接、交叉连接的区别...
外连接(out join) 外连接分为外左连接(left outer join)和外右连接(right outer join) 注释:left outer join 与 left join 等价, 一 ...
最新文章
- Java 18 要来了,你不会还在用Java 8吧?
- 基础知识——测试代码(七)
- 又是找 Bug 的一天! | 每日趣闻
- 黄聪:NaviCat通过Http方式连接服务器的MySQL数据库(转)
- 跳槽季,TurboMail邮件系统支招防员工邮件泄密
- 7.类的访问控制和继承
- mt7601u linux驱动下载,Ubuntu16.04安装DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
- 通用测试用例大全(转自——知了.Test)
- 电子版,材料获取说明
- Mac OS Git 安装
- Atom与markdown
- [Spring5]AOP底层原理
- linux 编译安装python,linux下编译安装python2.7.6
- 前端学习(2525):实现过滤功能
- java配合ajax加快发展_配合JAVA的AJAX使用
- N个数依次入栈,出栈顺序有多少种?
- python sklearn 梯度下降法_科学网—Python_机器学习_总结4:随机梯度下降算法 - 李军的博文...
- ioc,di,aop详解
- AMD: Developer Guides, Manuals ISA Documents
- 关于【apache- tomcat- 5.5.15/conf /Catalina/localhost配置虚拟目录】时的一些问题。(配置web项目的方式不止一种,虚拟目录就是一个)