MySQL的Union和OR查询
这里写目录标题
- **1. 创建表和索引**
- **2. 编写 `UNION` 查询**
- **3. 使用 `EXPLAIN` 分析查询**
- **4. 分析 `EXPLAIN` 结果**
- **可能的结果分析**:
- **5. 验证索引合并**
- **总结**
- **1. `UNION` 操作的分析**
- **为什么使用临时表?**
- 2. `OR` 条件的分析
- 为什么使用索引合并?
- 3. `UNION` 和 `OR` 的区别
- **总结**
在 MySQL 中,
UNION
操作通常用于合并两个查询的结果集。为了测试
UNION
操作是否会使用索引合并(Index Merge)功能,还是仅使用单列索引,可以按照以下步骤进行测试和分析。
1. 创建表和索引
根据表结构,为 phone
和 email
列创建单列索引:
CREATE INDEX idx_phone ON tb_user(phone);
CREATE INDEX idx_email ON tb_user(email);
2. 编写 UNION
查询
编写一个 UNION
查询,分别基于 phone
和 email
列进行查询:
SELECT * FROM tb_user WHERE phone = '12345678901'
UNION
SELECT * FROM tb_user WHERE email = 'example@example.com';
3. 使用 EXPLAIN
分析查询
使用 EXPLAIN
命令查看查询的执行计划,判断是否使用了索引合并功能:
EXPLAIN
SELECT * FROM tb_user WHERE phone = '12345678901'
UNION
SELECT * FROM tb_user WHERE email = 'example@example.com';
4. 分析 EXPLAIN
结果
在 EXPLAIN
的输出中,重点关注以下字段:
type
:访问类型,ref
表示使用了索引。key
:使用的索引名称。Extra
:额外信息,如果出现Using union
或Using index merge
,则表示使用了索引合并。
可能的结果分析:
-
仅使用单列索引:
- 每个子查询的
type
为ref
,key
为idx_phone
或idx_email
。 Extra
中没有Using index merge
。- 说明每个子查询分别使用了
phone
和email
的单列索引。
- 每个子查询的
-
使用了索引合并:
type
为index_merge
。key
可能显示idx_phone,idx_email
。Extra
中显示Using union(idx_phone,idx_email)
。- 说明 MySQL 使用了索引合并功能。
5. 验证索引合并
如果 EXPLAIN
结果显示没有使用索引合并,可以尝试强制使用索引合并:
SELECT * FROM tb_user WHERE phone = '12345678901' OR email = 'example@example.com';
然后再次使用 EXPLAIN
分析:
EXPLAIN
SELECT * FROM tb_user WHERE phone = '12345678901' OR email = 'example@example.com';
观察是否使用了索引合并。
type:index_merge
总结
- 使用
EXPLAIN
分析查询计划。 - 如果
EXPLAIN
的Extra
字段显示Using index merge
,则使用了索引合并功能。 - 如果每个子查询分别使用了单列索引,则说明没有使用索引合并。
通过以上方法,可以测试并判断 UNION
操作是否使用了索引合并功能。
实操之后
mysql> EXPLAIN
-> SELECT * FROM tb_user WHERE phone = '12345678901'
-> UNION
-> SELECT * FROM tb_user WHERE email = 'example@example.com';
+----+--------------+------------+------------+------+---------------+-----------+---------+-------+------+----------+-----------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------+------------+------------+------+---------------+-----------+---------+-------+------+----------+-----------------+
| 1 | PRIMARY | tb_user | NULL | ref | idx_phone | idx_phone | 35 | const | 1 | 100.00 | NULL |
| 2 | UNION | tb_user | NULL | ref | idx_email | idx_email | 303 | const | 1 | 100.00 | NULL |
| NULL | UNION RESULT | <union1,2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary |
+----+--------------+------------+------------+------+---------------+-----------+---------+-------+------+----------+-----------------+
从 EXPLAIN
的结果可以看出,UNION
操作和 OR
条件的执行计划有所不同。以下是详细解释:
1. UNION
操作的分析
UNION
操作的执行计划分为三个部分:
- 第一部分:
SELECT * FROM tb_user WHERE phone = '12345678901'
- type:
ref
,表示使用了索引。 - key:
idx_phone
,表示使用了phone
列的单列索引。 - Extra: 无额外信息。
- type:
- 第二部分:
SELECT * FROM tb_user WHERE email = 'example@example.com'
- type:
ref
,表示使用了索引。 - key:
idx_email
,表示使用了email
列的单列索引。 - Extra: 无额外信息。
- type:
- 第三部分:
UNION RESULT
- type: ALL,表示需要扫描所有行。
- Extra: Using temporary,表示使用了临时表来存储
UNION
的结果。
为什么使用临时表?
UNION
操作会将两个查询的结果集合并,并自动去除重复的行。为了实现这一点,MySQL 会将两个查询的结果存储在一个临时表中,然后对临时表进行去重操作。因此,UNION
操作通常会使用临时表。
2. OR
条件的分析
对于 OR
条件,MySQL 可能会使用索引合并(Index Merge)功能。例如:
EXPLAIN
SELECT * FROM tb_user WHERE phone = '12345678901' OR email = 'example@example.com';
执行计划可能如下:
- type:
index_merge
,表示使用了索引合并。 - key:
idx_phone,idx_email
,表示同时使用了phone
和email
列的单列索引。 - Extra: Using union(idx_phone,idx_email); Using where,表示 MySQL 使用了索引合并功能,并通过
WHERE
条件过滤结果。
为什么使用索引合并?
OR
条件需要同时满足两个条件中的任意一个。MySQL 会分别使用 phone
和 email
列的单列索引,然后将结果合并(Using union
),最后通过 WHERE
条件过滤结果。
3. UNION
和 OR
的区别
特性 | UNION | OR |
---|---|---|
结果集 | 合并两个查询的结果,并去重 | 合并两个条件的结果,不去重 |
索引使用 | 分别使用单列索引 | 可能使用索引合并(Index Merge) |
临时表 | 使用临时表存储结果 | 不使用临时表 |
性能 | 可能较慢,因为需要去重和临时表操作 | 通常更快,因为不需要去重 |
总结
UNION
:- 分别使用单列索引。
- 使用临时表存储结果并去重。
- 适合需要合并并去重的场景。
OR
:- 可能使用索引合并(
Using union
)。 - 不需要临时表,性能通常更好。
- 适合需要同时满足多个条件的场景。
- 可能使用索引合并(
根据实际需求选择合适的查询方式。如果需要去重,使用 UNION
;如果不需要去重,使用 OR
。
相关文章:
MySQL的Union和OR查询
这里写目录标题 **1. 创建表和索引****2. 编写 UNION 查询****3. 使用 EXPLAIN 分析查询****4. 分析 EXPLAIN 结果****可能的结果分析**: **5. 验证索引合并****总结****1. UNION 操作的分析****为什么使用临时表?** 2. OR 条件的分析为什么使用索引合并…...
金融业的AI革命——量化交易与智能风控(五)
第五章 AI驱动的智能投顾与普惠金融服务体系 一、智能投顾技术架构的范式革新 1. 技术演进三阶段 阶段核心技术典型应用局限性规则引擎(2015-2020)决策树、专家系统银行理财风险评估自动化(覆盖率98%)无法应对黑天鹅事件机器学习(2020-2023)…...
机动车授权签字人考试题库及答案
一、单选题 11、 资质认定,是指( )以上质量技术监督部门依据有关法律法规和标准、技术规范的规定,对检验检测机构的基本条件和技术能力是否符合法定要求实施的评价许可。资质认定包括检验检测机构计量认证。 A、县级 B、市级 C、地区 D、省级 答案࿱…...
Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因
Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因 一、背景二、查看topic日志信息三、结论四、解决方法一、背景 源头数据库在很短的时间内刷了大量的数据,部分数据在hdfs丢失了 理论上debezium数据采集不会丢失,就需要排查数据链路某个节点是否有数据丢失。 数据…...
鸿蒙学习-
鸿蒙数据传值 //* 传值 //* State /**State创建一个响应式的数据,但不是所有的更改都会引起刷新,只有被框架观察到的修改才会被刷新UI* 1. 基本数据类型如 number string boolean等值的变化修改* 2. Object类型,只会观察到第一层的数据变化或…...
【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】
你知道吗?全球每天产生的PDF文档超过10亿份,但90%的上班族还在用复制粘贴的笨办法处理文档!DeepSeek文档解析引擎就像给你的电脑装上了"文档翻译官",能把PDF/Word里的文字、表格、公式甚至排版样式都变成AI能理解的"语言"。举个真实场景:法务小姐姐用…...
WPS中如何批量上下居中对齐word表格中的所有文字
大家好,我是小鱼。 在日常制作Word表格时,经常需要对表格中的内容进行排版。经常会把文字设置成左对齐、居中对齐或者是右对齐,这些对齐方式都比较好设置,有时我们制作的表格需要把文字批量上下居中对齐,那么怎么操作…...
【LLM】增强大模型推理能力的四种范式
note 增强大模型推理能力的四种范式:推理时间扩展、纯强化学习(RL)、SFTRL、蒸馏(distillation) 。其实这几种方法本质就是SFTRL: 低成本做事就直接推理时间扩展稍微肯付出成本就蒸馏SFT,顺便搞点高质量COT SFT数据高级点就先用GRPO等RL学习…...
2025年华为手机解锁BL的方法
注:本文是我用老机型测试的,新机型可能不适用 背景 华为官方已经在2018年关闭了申请BL解锁码的通道,所以华为手机已经无法通过官方获取解锁码。最近翻出了一部家里的老手机华为畅玩5X,想着能不能刷个系统玩玩,但是卡…...
鸿蒙状态管理概述 v2
状态管理v2 概述状态管理之v2ObservedV2 和 Trace状态管理V1版本对嵌套类对象属性变化直接观测的局限性ObservedV2 和 Trace 使用场景 Local状态管理V1版本State装饰器的局限性 Param状态管理V1版本接受外部传入的装饰器的局限性 OnceEventComputedComputed 使用场景 TypePersi…...
阿里云上的网站配置HTTPS
1. 获取SSL证书 创建证书 下载证书 下载 上传 .key .pem 文件 到 阿里云服务器 /etc/nginx/ssl nginx.conf 配置 server { listen 443 ssl; server_name yuming; ssl_certificate /etc/nginx/ssl/*.pem; ssl_certificate_key /etc/nginx/ssl/*.key;...
【部署优化篇十四】【十万字全景拆解:GitHub Actions自动化流水线设计圣经(DeepSeek工业级实践大公开)】
一、从手工作坊到智能工厂:CI/CD的革命之路 想象一下,你所在的公司每天要手工组装1000台手机,每个环节都靠老师傅肉眼检查——这就是没有CI/CD的软件开发现状。GitHub Actions的出现,就像给软件交付装上了特斯拉的超级工厂流水线。 DeepSeek的CI/CD演进史就是一部血泪史:…...
Golang | 每日一练 (3)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Golang | 每日一练 (3)题目参考答案map 实现原理hmapb…...
Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当今社会,随着人们生活水平的不断提高和健康意识的日益增强,健…...
深入解析Textual库:打造现代化的终端用户界面(TUI)
深入解析Textual库:打造现代化的终端用户界面(TUI) 在终端应用程序的世界里,过去的交互方式通常是简单的命令行输入和文本输出。然而,随着开发者对更高可用性和更友好界面的追求,现代终端用户界面…...
基于ffmpeg+openGL ES实现的视频编辑工具-opengl相关逻辑(五)
在我们的项目中,OpenGL ES 扮演着至关重要的角色,其主要功能是获取图像数据,经过一系列修饰后将处理结果展示到屏幕上,以此实现各种丰富多样的视觉效果。为了让大家更好地理解后续知识,本文将详细介绍 OpenGL 相关代码。需要注意的是,当前方案将对 OpenGL 的所有操作都集…...
加班限制了进步
今天周六,大家都在加班吗? 做个统计。 最近面试了很多硬件工程师,还没有找到如意的。 这些面试者都很会解决问题,但是不会闭环问题。 EMC不过,加个磁环就过了。为什么加磁环就过了,底层原理不清楚。 改…...
容器化部署tomcat
容器化部署tomcat 需求在docker容器中部署tomcat,并通过外部机器访问tomcat部署的项目 容器化部署要先装好docker容器(docker安装配置) 实现步骤: 拉取tomcat docker pull tomcat用于列出本地Docker主机上存储的所有镜像 docker images在root目录里面创建tomc…...
【HeadFirst系列之HeadFirst设计模式】第7天之命令模式:封装请求,轻松实现解耦!
命令模式:封装请求,轻松实现解耦! 大家好!今天我们来聊聊设计模式中的命令模式(Command Pattern)。如果你曾经需要将请求封装成对象,或者希望实现请求的撤销、重做等功能,那么命令模…...
尚硅谷爬虫note009
一、jsonpath 1.安装 pip install jsonpath 2.使用 只能解析本地文件 .json文件 {"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century&qu…...
C语言(11)------------->while循环
一、if与while的区别 在C语言中,有三大结构,分别是顺序、选择和循环。在前面的博客文章中,我们解释了if语句的用法,可以参考:C语言(7)------------>if语句-CSDN博客 从文章中&…...
Unity 全局屏幕点击特效
思路: 1、生成一个点击特效实例,每点击屏幕,就调整特效实例的位置并控制特效的显隐状态即可。 2、需要注意要保证在编辑器开发时或手机上运行时都要显示点击效果。 方案一 (推荐) using UnityEngine; using UnityEn…...
【数据结构初阶第十二节】设计循环队列
云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 还有最后一道关于队列的习题,这题有点难,准备好迎接挑战吧! 目录 1.【题目】 2.实现循环队列推荐用数组,Why? 3.Q1:如…...
【小白学HTML5】盒模型(一文讲清margin、padding)_第三讲
根据第一讲的内容,我们知道margin是外边距、padding是内边距,那么内外边距该怎么设置呢? 1、margin:外边距 第一种情况:比如设置外边距为上10px、右20px、下30px、左40px 外边距可以分别设置为:margin-t…...
PLC数据采集网关(三格电子)
产品概述 PLC转Modbus网关型号SG-PLC-Private(PLC私有协议网关),是三格电子推出的工业级网关(以下简称网关),主要用于在不需要对PLC编程的情况下将PLC数据映射到Modbus TCP(映射的方式符合PLC工程师使用习惯…...
基于图扑 HT 可视化实现智慧地下采矿可视化
在前端开发领域,不断涌现的新技术为各行业带来了创新变革的可能。今天,让我们聚焦于图扑软件自研的 HT for Web 产品,看看它如何在前端 2D、3D 渲染方面发力,为智慧地下采矿可视化打造令人惊叹的解决方案,为开发者开启…...
【网络】高级IO(2)
或者在某些情况下,它可能是: typedef unsigned int nfds_t; 前言 由于select函数有下面几个特别明显的缺点,就推演出了改进版本——poll函数 比如select监视的fd是有上限的,我的云服务器内核版本下最大上限是1024个fd…...
论文解读 | AAAI'25 Cobra:多模态扩展的大型语言模型,以实现高效推理
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 个人信息 作者:赵晗,浙江大学-西湖大学联合培养博士生 内容简介 近年来,在各个领域应用多模态大语言模型(MLLMs&…...
区块链共识机制详解
区块链共识机制详解 🤝 1. 什么是共识机制? 共识机制是区块链网络中,所有节点就某个状态(如交易的有效性)达成一致的规则和过程。它解决了在去中心化网络中如何确保数据一致性的问题。 2. 主流共识机制 2.1 工作量证…...
Unity游戏制作中的C#基础(1)界面操作基础
1.脚本有关注意事项 (1).进入项目之后,一般创建一个文件夹Scripts用来存放c#脚本; (2).在Scripts中创建脚本,双击脚本,进入VS编辑器,有如下结构: start&#…...
python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公
文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件(openpyxl库)三、 处理 Word 文件(python-docx库)四、 处理 PPT 文件(python-pptx库)五、 自动发送邮件(smtplib和…...
欢乐力扣:同构字符串
文章目录 1、题目描述2、 代码 1、题目描述 同构字符串。给定两个字符串 s 和 t ,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符…...
近10年气象分析(深度学习)
这是一个气象数据分析程序,主要用于分析和可视化气象数据。以下是该文件的主要功能: 1. 数据加载 在线数据:尝试从 GitHub 加载气象数据。 示例数据:如果无法加载在线数据,程序会自动生成示例数据。 2. 数据分析 …...
win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057
碰到这个问题挺麻烦的,要用的软件打不开了. 其实解决方法就是去组策略中修改一个策略就可以了,但是: 先来说: 而且,使用cmd输入的gpedit.msc也打不开了. 这个怎么解决? @echo off pushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPo…...
【JAVA】封装多线程实现
系列文章目录 java知识点 文章目录 系列文章目录👉前言👉一、封装的目标👉二、常见的封装方式及原理👉壁纸分享👉总结 👉前言 在 Java 中,封装多线程的原理主要围绕着将多线程相关的操作和逻辑…...
长短期记忆网络:从理论到创新应用的深度剖析
一、引言 1.1 研究背景 深度学习在人工智能领域的发展可谓突飞猛进,而长短期记忆网络(LSTM)在其中占据着至关重要的地位。随着数据量的不断增长和对时序数据处理需求的增加,传统的神经网络在处理长序列数据时面临着梯度消失和梯…...
过程监督(Process Supervision)融入到 GRPO (Group Relative Policy Optimization)
下面演示如何把“过程监督(Process Supervision)”的思想融入到 GRPO (Group Relative Policy Optimization) 中,从而对每个输出的中间步骤逐一打分、计算相对优势。本文的示例代码与 grpo_train.py (来源见下文)类似&…...
ES6中Object.defineProperty 的详细用法和使用场景以及例子
ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法,ES6 继续强化了该方法的使用,它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为,如读写权限、可枚举性和可配置性。 1. Objec…...
【服务器与本地互传文件】远端服务器的Linux系统 和 本地Windows系统 互传文件
rz 命令:本地上传到远端 rz 命令:用于从本地主机上传文件到远程服务器 rz 是一个用于在 Linux 系统中通过 串口 或 SSH 上传文件的命令,它实际上是 lrzsz 工具包中的一个命令。rz 命令可以调用一个图形化的上传窗口,方便用户从本…...
NVIDIA A100 SXM4与NVIDIA A100 PCIe版本区别深度对比:架构、性能与场景解析
NVIDIA A100 SXM4与PCIe版本深度对比:架构、性能与场景解析 作为NVIDIA Ampere架构的旗舰级数据中心GPU,A100系列凭借强大的计算能力和显存带宽,已成为人工智能训练、高性能计算(HPC)等领域的核心硬件。然而ÿ…...
RAG基本原理
1.RAG全称是Retrieval-Augmented Generation Generation 的含义是 基于用户的输入,生成具有上下文含义的一段文字。 Query 比如说 太阳系中,哪个行星拥有的卫星数目最多? 回答Answer 木星,木星目前有79个卫星 这样的回答存在两个…...
WPS接入deepseek-OfficeAI助手插件下载
功能简介 OfficeAI 助手 是一款免费的智能AI办公工具软件,专为 Microsoft Office 和 WPS 用户打造。 无论你是在寻找如何输入“打勾(√)符号”的方法,还是想知道“怎么在插入表格前添加文字”,或者“该用哪个公式”&a…...
【微中子代理踩坑-前端node-sass安装失败】
微中子代理踩坑-前端node-sass安装失败-windows 1.npm版本2.python2.73.安装Visual Studio 1.npm版本 当前使用node版本13.12.0 2.python2.7 安装python2.7.9并配置环境变量 3.安装Visual Studio 安装Visual Studio 我是直接勾选了3个windows的sdk,然后就好了 最后 npm in…...
在群晖上使用Docker安装思源笔记
最近一段时间,docker的镜像地址都失效了,在群晖系统中,无论是早期版本的docker,还是最新版本中的Container Manager,注册表中都无法链接到docker的镜像,于是,就花了点时间查找资料&#x…...
后端之路——阿里云OSS云存储
一、何为阿里云OSS 全名叫“阿里云对象存储OSS”,就是云存储,前端发文件到服务器,服务器不用再存到本地磁盘,可以直接传给“阿里云OSS”,存在网上。 二、怎么用 大体逻辑: 细分的话就是: 1、准…...
华为guass在dbever和springboot配置操作
下面记录华为guass在dbever和springboot配置操作,以备忘。 1、安装dbeaver-ce-23.2.0-x86_64-setup.exe和驱动程序 Download | DBeaver Community 2、配置高斯数据库驱动 3、新建数据库连接 4、操作指引 opengauss官方文档 https://docs-opengauss.osinfra.cn/zh…...
【STM32学习】标准库实现STM32 ADC采集1路、2路、多路
目录 ADC采集 ADC配置步骤 STM32F103C8T6的ADC 输入通道 编辑 1路ADC(A4 ADC 通道4) 1路ADC源码代码链接: 2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现 多路ADC实现采集 ADC采集 ADC配置步骤 使能GPIO…...
常用网络工具分析(ping,tcpdump等)
写在前面 本文看下常用网络工具。 1:ping 1.1:用途 用于检验网络的连通性。 1.2:实战 在Linux环境中执行:ping www.sina.com.cn: [rootlocalhost ~]# ping www.sina.com.cn PING spool.grid.sinaedge.com (111.…...
计算机视觉:主流数据集整理
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
1.1 go环境搭建及基本使用
golang下载地址: Download and install - The Go Programming Language (google.cn) 验证安装是否成功: go version 查看go环境 go env 注意:Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目,也不需要把项目放到GO…...