位置: 编程技术 - 正文

MySQL中使用or、in与union all在查询命令下的效率对比(MySQL中使用_____语句更新表中的数据)

编辑:rootadmin

推荐整理分享MySQL中使用or、in与union all在查询命令下的效率对比(MySQL中使用_____语句更新表中的数据),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:MySQL中使用命令行查看二进制文件的命令是,MySQL中使用什么关键字来删除表格中的数据,MySQL中使用什么语句来更新表中的记录,MySQL中使用命令行查看二进制文件,MySQL中使用( )来调用存储过程,MySQL中使用命令行查看二进制文件,MySQL中使用( )来调用存储过程,MySQL中使用什么语句来更新表中的记录,内容如对您有帮助,希望把文章链接给更多的朋友!

OR、in和union all 查询效率到底哪个快?网上很多的声音都是说union all 快于 or、in,因为or、in会导致全表扫描,他们给出了很多的实例。但真的union all真的快于or、in?

这条语句执行结果条,执行时间为0.s

这条语句的执行结果时间为0.s

这条语句的执行结果和in的结果差不多

难道是网上的说法有误?难道和索引有关?在firstname上建立了一个索引

重新执行

union的执行执行计划如下,执行时间为0.s

in的执行计划如下,执行时间也为0.s

or的执行计划如下,执行时间也为0.s

感觉性能差不多啊。但是注意执行计划中的type,ref要好于range哦(ref为非唯一性索引扫描,range为索引范围扫描)突然感觉好像和网上说的差不多了,但是第一个语句走了两个ref扫描 会不会效率比走一次range的扫描低啊。

要不我再试试主键,这个是唯一的,会不会和网上的效果一直呢?

union的执行计划如下

in的执行计划如下

or的执行计划如下

感觉结果和第二个实验还是差不多。

MySQL中使用or、in与union all在查询命令下的效率对比(MySQL中使用_____语句更新表中的数据)

下面本文就采用实例来探讨在实际的查询命令下它们之间的效率对比究竟如何。1:创建表,插入数据、数据量为1千万【要不效果不明显】。

该表只有两个字段 ID为主键【索引页类似】,一个是普通的字段。(偷懒就用简单的表结构呢)向BT表中插入1千万条数据这里我写了一个简单的存储过程【所以你的mysql版本至少大于5.0,俺的版本为5.1】,代码如下。注意:最好

修改为

修改原因在 非索引列及VNAME使用了联合进行完全扫描请使用1 。 非索引列及VNAME使用了全表扫描请使用2 。

就不写注释呢,挺简单的。存储过程是最好设置下innob的相关参数【主要和日志、写缓存相关这样能加快插入】,俺没有设置插入1千万条数据插了6分钟。部分数据如下:1千万数据类似

2:实战 2.1 :分别在索引列上使用 or、in、union all 我们创建的表只有主键索引,所以只能用ID做查询呢。我们查 ID 为 ,,的三个数据各个耗时如下:

时间都为0.,怎么会这样呢,呵呵所有查询都是在毫秒级别。我使用其他的工具--EMS SQL Manager for mysql查询显示时间为 ms, ms, ms,时间相差了多少几乎可以忽略。然后我们在看看各自的执行计划

这里要注意的字段type 与ref字段我们发现union all 的所用的 type【type为显示连接使用了何种类型】 为ref 而or和in为range【ref连接类型优于range,相差不了多少】,而查询行数都一样【看rows字段都是为3】。从整个的过程来看,在索引列使用常数or及in和union all查询相差不了多少。但为什么在有的复杂查询中,再索引列使用or及in 比union all 速度慢很多呢,这可能是你的查询写的不够合理,让mysql放弃索引而进行全表扫描。2.2:在非索引列中使用 or、in及union all。 我们查 VNAME 为 M,M,M的三个数据各个耗时如下:

我们发现为啥union all查询时间几乎为 or 和in的三倍。这是为什么呢,我们先不说,先看看三个的查询计划。

这里我们发现计划几乎一样。但我们要注意扫描的此时对于 or及in 来说 只对表扫描一次即rows是列为。而对于union all 来说对表扫描了三次即rows的和为*3。这也是为什么我们看到union all 为几乎为三倍的原因。备注: 如果使用存储过程使用第二sql该执行计划所有的type列 为 all,其实这个是我最想演示的,但现在已经快写完毕了才发现问题将错就错呢。

3:总结 3.1:不要迷信union all 就比 or及in 快,要结合实际情况分析到底使用哪种情况。 3.2:对于索引列来最好使用union all,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引。 3.3:对于只有非索引字段来说你就老老实实的用or 或者in,因为 非索引字段本来要全表扫描而union all 只成倍增加表扫描的次数。 3.4:对于及有索引字段【索引字段有效】又包含非索引字段来时,按理你也使用or 、in或者union all 都可以, 但是我推荐使用or、in。 如以下查询:

该两个查询速度相差多少 主要取决于 索引列查询时长,如索引列查询时间太长的话,那你也用or或者in代替吧。 3.5: 以上主要针对的是单表,而多表联合查询来说,考虑的地方就比较多了,比如连接方式,查询表数据量分布、索引等,再结合单表的策略选择合适的关键字。

MySQL下使用Inplace和Online方式创建索引的教程 MySQL各版本,对于addIndex的处理方式是不同的,主要有三种:(1)CopyTable方式这是InnoDB最早支持的创建索引的方式。顾名思义,创建索引是通过临时表拷

MySQL中InnoDB存储引擎的锁的基本使用教程 MyISAM和MEMORY采用表级锁(table-levellocking)BDB采用页面锁(page-levelocking)或表级锁,默认为页面锁InnoDB支持行级锁(row-levellocking)和表级锁,默认为行级

MySQL中二进制与重做日志文件的基本概念学习教程 二进制日志二进制日志记录了所有对数据库执行更改的操作,二进制主要有以下两种作用:1、恢复(recovery)2、复制(replication)二进制日志的启动:

标签: MySQL中使用_____语句更新表中的数据

本文链接地址:https://www.jiuchutong.com/biancheng/312371.html 转载请保留说明!

上一篇:Windows下MySQL日志基本的查看以及导入导出用法教程(mysql日志文件在哪里)

下一篇:MySQL下使用Inplace和Online方式创建索引的教程(mysql in())

  • 金融商品转让和持有至到期都需要缴纳增值税吗
  • 进口消费税应该记到什么科目
  • 填第二季度的利润总额怎么填
  • 文化事业建设费减免政策
  • 员工交通费属于什么费用
  • 公交补贴收入账务处理怎么做?
  • 费用暂估入账
  • 高速过路费抵扣增值税
  • 招标代理服务费收费标准2023
  • 调账以前年度损益调整如何结转
  • 网上购物退款后又收到产品了怎么办
  • 子公司打钱给母公司
  • 增值税可以抵扣企业所得税吗
  • 实际入库数量怎么算
  • 7月1日所有公司发票系统需要升级,办公用品发票买什么开什么
  • 以前年度损益调整怎么用
  • 序列号不可用怎么办
  • 加班工资是否属劳动关系
  • 非流动负债怎么巧记
  • 去年的财务费用忘记帐能入今年的账吗?
  • 生育津贴的相关法律规定
  • 会计中如何区分借方和贷方
  • 可转债 承销
  • 苹果手机微信怎么迁移聊天记录到新手机
  • 苹果电脑出现macos什么意思
  • 费用发票开的是跨年的账务处理?
  • blender不支持win7
  • 销售自己2008年1月购入并作为
  • php网站实例
  • 实例讲解php设计软件
  • 结转本月收入类账户到本年利润
  • yolov5 入门
  • php base64 编码与解码实例代码
  • 37.JavaScript对象与JSON格式的转换,JSON.stringify、JSON.parse方法的使用方法和注意事项
  • 卷积拆分
  • 汽油增值税专用发票几个点
  • 冲减多计提的工资怎么做账
  • 换货公司是否可信?
  • 企业收取的罚款需要交企业所得税吗
  • 财务费用在贷方,怎么结转到本年利润?
  • python中变量类型有几种
  • 计提工资大于发放工资,所得税汇算要调整吗
  • 收到生育津贴入什么科目
  • access ms
  • db2自增函数
  • 采用汇兑的方式归还前欠货款
  • 建安企业费用有哪些
  • 差旅费涉及的科目
  • 经营利润所得税费用
  • 关于幼儿园的会议内容
  • 困难补助属于兜底政策吗
  • 退回以前年度所得税账务处理
  • 划拨土地使用权管理暂行办法
  • 建筑施工企业劳务费怎么入成本
  • 客户用个人账户转4s店开公司的机动车发票
  • 可抵扣的税票
  • 开一般户需要什么理由
  • windowsserver2008r2密码重置
  • centos下虚拟机
  • centos7 lo
  • win7更改磁盘分区
  • android break
  • unity脚本编写教程
  • opengl教程48讲
  • number fields to_char
  • cocos2dx-3.1.1 win8+eclipse+android开发 初学者容易迷惑的两个问题
  • tensorflow.nn
  • perl -i -pe
  • python咋写
  • js转义字符串
  • dropdownlist绑定数据
  • js字符串函数
  • easyui messager alert 三秒后自动关闭提示的实例
  • Unity3D游戏开发标准教程
  • 广东省电子税务局登录方式
  • 特殊工种作业人员
  • 土地增值税如何入账
  • 荆州区国税局
  • 房产证是有开发商办吗
  • 18个税种征税范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设