博客已搬家,更多内容查看https://liangyongrui.github.io/

Mysql中Union和OR性能对比

在leetcode上看到一篇文章,整理一下

参考:https://leetcode.com/problems/big-countries/discuss/103561/Union-and-OR-and-the-Explanation

有两种SQL,结果是一样的,但是第二种快一点:

#用OR
SELECT name, population, area
FROM World
WHERE area > 3000000 OR population > 25000000 #用Union
SELECT name, population, area
FROM World
WHERE area > 3000000
UNION
SELECT name, population, area
FROM World
WHERE population > 25000000

为什么Union比OR更快呢?

  1. 严格的讲,用Union更快仅限于扫描两个不同的列

    (当然,UNION ALL 比 UNION 更快)

  2. MySQL 通常是使用一个索引来扫描表的,如果有两个索引的时候,第二个索引就要再扫一边

    如果时用UNION就是两次都扫一个索引。

    (我觉得第一个时间复杂度时O(logn*logn), 第二个是O(logn * 2), 忽略常数时间复杂度不变

  3. benchmark 关于 UNION 和 OR, 有下表

    • Scenario 3: Selecting all columns for different fields

      CPU Reads Duration Row Counts
      OR 47 1278 443 1228
      UNION 31 1334 400 1228
    • Scenario 4: Selecting Clustered index columns for different fields

      CPU Reads Duration Row Counts
      OR 0 319 366 1228
      UNION 0 50 193 1228
  4. 总结:

    • 从benchmark的表上来看不加索引的话几乎没区别, 甚至用OR的读性能更好。
    • 我觉得在性能不是特别敏感的时候,还是用or比较好。因为代码简介,可读性高。反之用Union

Mysql中Union和OR性能对比的更多相关文章

  1. MySQL中union和order by一起使用的方法

    MySQL中union和order by是可以一起使用的,但是在使用中需要注意一些小问题,下面通过例子来说明.首先看下面的t1表. 1.如果直接用如下sql语句是会报错:Incorrect usage ...

  2. MySQL中UNION和UNION ALL的使用

    在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后 ...

  3. Python开发【笔记】:从海量文件的目录中获取文件名--方法性能对比

    Python获取文件名的方法性能对比 前言:平常在python中从文件夹中获取文件名的简单方法   os.system('ll /data/')   但是当文件夹中含有巨量文件时,这种方式完全是行不通 ...

  4. mysql中UNION ALL用法

    MYSQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果. 举例说明: select * from table1 u ...

  5. mysql中 union是什么鬼

    在sql注意时,经常会用到一个不怎么常用的联合查询 http://www.php20.com/forum.php?m ... &extra=page%3D1 清空表.从新执行一下以上链接中的s ...

  6. Mego(1) - NET中主流ORM框架性能对比

    从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问 ...

  7. ffmpeg中的sws_scale算法性能对比

    sws_scale的算法有如下这些选择. #define SWS_FAST_BILINEAR 1#define SWS_BILINEAR 2#define SWS_BICUBIC 4#define S ...

  8. MySQL和OneSQL并行插入性能对比

    按照我的作风,没图说个啥 环境 下面是受叶金荣老师的启发把相关环境交代清楚 MySQL和OneSQL的关键参数配置如下 数据库 sync_binlog innodb_flush_log_at_trx_ ...

  9. mysql中union与union all的区别

    当查询表结构完全相同的多张表的数据时: 1.当查询条件完全相同且不包括主键,此时用union查询会过滤掉查询出的重复的记录,及漏查记录:使用union all进行查询,则会查出所有的符合条件的记录,保 ...

随机推荐

  1. 关于linux免密登录及ssh客户端的使用

    操作系统环境: CentOS Linux release 7.7.1908 (Core) 1.首先在linux服务器上,使用ssh-keygen命令生成密钥对文件(一直回车即可,默认使用rsa算法), ...

  2. Flutter 中 GestureDetector 的使用误区

    在实际开发中,我们通常需要实现某个组件的更多点击事件.比如:原生的RaisedButton组件是无法响应诸如拖拽或是按下.抬起等细化的动作,它只有一个onPressed()方法来表示.当我们想实现这些 ...

  3. Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Api (1) - 创建 Stream

    影子 在学习Spring WebFlux之前,我们先来了解JDK的Stream,虽然他们之间没有直接的关系,有趣的是 Spring Web Flux 基于 Reactive Stream,他们中都带了 ...

  4. 全网最全95道MongoDB面试题1万字详细解析

    1.mongodb是什么? MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在给 WEB ...

  5. Quartz.Net系列(三):解读Quartz.Net源码领略设计模式在其中的应用

    1.Builder(建造者)模式 JobBuilder  DateBuilder  其他的Builder(TriggerBuilder.SchedulerBuilder等) 2.抽象工厂模式 ISch ...

  6. [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找

    739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...

  7. 让人又爱又恨的Lombok,到底该不该用

    1 简介 Lombok,印尼的一个岛屿,龙目岛.但在Java的世界里,它是一个方便的类库,能提供很多便利,因此得到许多人的青睐.但也有不少反对声音.这是为什么呢? 之前去龙目岛拍的日落. 2 Lomb ...

  8. Android选项卡学习

    什么是选项卡 顶部的导航条就是选项卡了. Android开发中添加选项卡的步骤 图片不太懂上代码: activity_main.xml <?xml version="1.0" ...

  9. 迷你图书管理系统 源代码 Java初级小项目

    今天博主再给大家分享一个小项目:MiNi图书管理系统.用的是Java语言开发的,代码不多,大概260行左右吧,系统是实现图书的新增图书.删除图书.借阅图书.归还图书.查看图书等简单的功能(后附源代码) ...

  10. 01MySQL内核分析-The Skeleton of the Server Code

    摘要 这个官方文档一段对MySQL内核分析的一个向导.是对MySQL一条insert语句写入到MySQL数据库的分析. 但是,对于MySQL 5.7版本来说,基本上都是写入到innodb引擎.但也还是 ...