mysql执行计划id为空(UNION关键字)详解

简介

在工作过程中,有时候会对慢查询进行调优。对于MySQL的SQL语句调优,MySQL本身提供了强大的explain关键字用于查询分析执行计划。本文主要给大家介绍了关于mysql执行计划id为空(UNION关键字)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的 介绍吧

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。例如,我有两个表,表1记录的是公司男员工的数据,包括年龄、姓名、职位。表2记录的是公司女员工的数据,包括姓名、家庭住址、手机号等字段。这时,我们想要根据一定条件,查询两个表的姓名的集合。就会用到 UNION 关键字。

UNION 可以查询多个字段,不过 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

语法

 SELECT column_name(s) FROM table_name1
 UNION
 SELECT column_name(s) FROM table_name2

UNION 操作符会对结果集进行去重。如果允许重复值,可以用 UNION ALL 两者除去重功能外,没有其他区别。

实例

这里的实例,就以简介里的介绍为需求,建立两个表格,并且进行相应的操作。

首先,建立user1,user2 两个表格,建表语句如下:

-- 建表语句
CREATE TABLE user1 (
 id INT,
 age INT,
 NAME VARCHAR (5),
 position VARCHAR (8)
);
CREATE TABLE user2 (
 id INT,
 name VARCHAR(5),
 address VARCHAR(50),
 phone_number VARCHAR(20)
)

其次,插入对应数据,sql如下:

-- 数据插入语句
INSERT INTO user1
VALUES
 (
  1,
  20,
  '张三',
  '技术主管'
 );

INSERT INTO user1
VALUES
 (
  2,
  20,
  '李四',
  '产品主管'
 );

INSERT INTO user1
VALUES
 (
  3,
  20,
  '王五',
  '运营主管'
 );

INSERT INTO user1
VALUES
 (
  4,
  20,
  '赵六',
  '后勤主管'
 ) INSERT INTO user2 (
  id,
  NAME,
  address,
  phone_number
 )
VALUES
 (
  1,
  '珍珍',
  '北京',
  '155332211'
 );

INSERT INTO user2 (
 id,
 NAME,
 address,
 phone_number
)
VALUES
 (
  2,
  '莲莲',
  '上海',
  '155332211'
 );

INSERT INTO user2 (
 id,
 NAME,
 address,
 phone_number
)
VALUES
 (
  3,
  '爱爱',
  '深圳',
  '155332211'
 );

最后,运行UNION语句,进行查询

 -- UNION 语句
 SELECT NAME FROM user1
 UNION
 SELECT name FROM user2

代码执行后,得到结果如下:

  

这里的结果集中的列名为UNION语句的第一个select语句的列名(user1 为NAME ,user2 为name)。

explain的时候,id为null

在执行UNION的执行计划的时候,最后一个合并结果集的操作的执行id为null。而且,第一个执行的select_type为简单查询,第二个及以后的查询为UNION,最后合并时的select_type为UNION RESULT。

执行计划代码如下:

EXPLAIN SELECT NAME FROM user1
UNION
SELECT name FROM user2

结果如下:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 详解一条sql语句在mysql中是如何执行的

    概览 最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 下面是mysql的一个简要架构图: mysql主要分为Server层和存储引擎层 Server层:主要包括连接器.查询缓存.分析器.优化器.执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程.触发器.视图,函数等,还有一个通用的日志模块 bing

  • MySql中如何使用 explain 查询 SQL 的执行计划

    explain命令是查看查询优化器如何决定执行查询的主要方法. 这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的. 1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的. 应用层,主要负责与客户端进行交互,建立链接,记住链接状态,

  • SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)

    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engin

  • Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)

    在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映.这个时候,就需要kill掉某个正在消耗资源的query语句即可, KILL命令的语法格式如下: KILL [CONNECTION | QUERY] thread_id 每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程. KILL允许自选的CONNECTION或QUERY修改符:KILL CONNECTION与不

  • MySQL执行状态的查看与分析

    当感觉mysql性能出现问题时,通常会先看下当前mysql的执行状态,使用 show processlist 来查看,例如: 其中state状态列信息非常重要,先看下各列含义,然后看下state常用状态 各列的含义 1.id 一个标识,你要kill一个语句的时候使用,例如 mysql> kill 207; 2.user 显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句 3.host 显示这个语句是从哪个ip 的哪个端口上发出的,可用来追踪出问题语句的用户 4.db 显示这

  • sql和MySQL的语句执行顺序分析

    今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1)from (2) on (3) join (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum....

  • MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    前言 在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序. 下面分别对EXPLAIN命令结果的每一列进行说明: .select_type:表示SELECT的类型,常见的取值有: 类型 说明 SIMPLE 简单表,不使用表连接或子查询 PRIMARY 主查询,即外层的查询 UNION UNION中的第二个或者后面的查询语句 SUBQUERY 子查询中的第一个 .table:输出结果集的表(表别名) .t

  • MySQL数据库Event定时执行任务详解

    一.背景 由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间.即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的.在我们项目中由于不清理数据,一个表占的空间竟然达到了4G之多.想想有多可怕... 这里介绍的是用MySQL 建立一个定时器Event,定期清除掉之前的不必要事件. 二.内容 #1.建立存储过程供事件调用 delimiter// drop procedure if exists middle_proce// create proc

  • mysql执行计划id为空(UNION关键字)详解

    简介 在工作过程中,有时候会对慢查询进行调优.对于MySQL的SQL语句调优,MySQL本身提供了强大的explain关键字用于查询分析执行计划.本文主要给大家介绍了关于mysql执行计划id为空(UNION关键字)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的 介绍吧 UNION 操作符用于合并两个或多个 SELECT 语句的结果集.例如,我有两个表,表1记录的是公司男员工的数据,包括年龄.姓名.职位.表2记录的是公司女员工的数据,包括姓名.家庭住址.手机号等字段.这时,

  • Oracle固定执行计划之SQL PROFILE概要文件详解

    1.  引子 Oracle系统为了合理分配和使用系统的资源提出了概要文件的概念.所谓概要文件,就是一份描述如何使用系统的资源(主要是CPU资源)的配置文件.将概要文件赋予某个数据库用户,在用户连接并访问数据库服务器时,系统就按照概要文件给他分配资源. 包括: 1.管理数据库系统资源. 利用Profile来分配资源限额,必须把初始化参数resource_limit设置为true默认是TRUE的. 2.管理数据库口令及验证方式. 默认给用户分配的是DEFAULT概要文件,将该文件赋予了每个创建的用户

  • 带你学习MySQL执行计划

    1.执行计划简介 执行计划是指一条 SQL 语句在经过 MySQL 查询优化器的优化会后,具体的执行方式.MySQL 为我们提供了  EXPLAIN 语句,来获取执行计划的相关信息.需要注意的是,EXPLAIN 语句并不会真的去执行相关的语句,而是通过查询优化器对语句进行分析,找出最优的查询方案,并显示对应的信息. 执行计划通常用于 SQL 性能分析.优化等场景.通过 explain 的结果,可以了解到如数据表的查询顺序.数据查询操作的操作类型.哪些索引可以被命中.哪些索引实际会命中.每个数据表

  • mysql执行计划介绍

    烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至关重要.下面我简单讲讲mysql的执行计划,只列出了一些常见的情况,希望对大家有所帮助. 测试表结构: 复制代码 代码如下: CREATE TABLE `t1` (  `c1` int(11) NOT NULL DEFAULT '0',  `c2` varchar(128) DEFAULT NULL,  `c3` varchar(64) DEFAULT NULL,  `c4`

  • 一文带你看懂MySQL执行计划

    目录 前言 explain/desc 用法 explain/desc 输出详解 一.id ,select 查询序列号 二.select_type,查询语句类型 三.table,查询涉及的表或衍生表 四.partitions查询涉及到的分区 五.type提供了判断查询是否高效的重要依据依据 六.possible_keys:指示MySQL可以从中选择查找此表中的行的索引. 七.key:MySQL查询实际使用到的索引. 八.key_len:表示索引中使用的字节数(只计算利用索引作为index key的

  • 详解 MySQL 执行计划

    EXPLAIN语句提供有关MySQL如何执行语句的信息.EXPLAIN与SELECT,DELETE,INSERT,REPLACE和UPDATE语句一起使用. EXPLAIN为SELECT语句中使用的每个表返回一行信息.它按照MySQL在处理语句时读取它们的顺序列出了输出中的表. MySQL使用嵌套循环连接方法解析所有连接.这意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表中找到匹配的行,依此类推.处理完所有表后,MySQL输出所选列,并通过表列表回溯,直到找到一个表,其中有更多匹配

  • MySQL执行计划详解

    一.MySQL执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个对象.其中JOIN类表示一个查询语句块的优化和执行,每个select查询语句(即Query_block对象)在处理的时候,都会被当做JOIN对象,其定义在sql/sql_optimizer.h. QEP_TAB是Query Execution Plan Table的缩写,这里的表Table对象主要包含物化表.临时表.派生表.常量表等.JOIN::optimize()是优化执行器的统一入口,在这里会把一个

  • MySQL的视图和索引用法与区别详解

    MySQL的视图 简单来说MySQL的视图就是对SELECT 命令的定义的一个快捷键,我们查询时会用到非常复杂的SELECT语句,而这个语句我们以后还会经常用到,我们可以经这个语句生产视图.视图是一个虚拟的表,它不存储数据,所用的数据都在真实的表中. 这样做的好处有: 1.防止有未经允许的租户访问到敏感数据 2.将多个物理表抽象成一个逻辑表 3.结果容易理解 4.获得数据更容易,很多人对SQL语句不太了解,我们可以通过创建视图的形式方便用户使用. 5.显示数据更容易. 6.维护程序更方便.调试视

  • MySQL筑基篇之增删改查操作详解

    目录 一.增加表中数据 1.无自增列时 2.有自增列时 二.删除表中数据 1.使用delete 2.使用truncate 三.修改表中数据 四.*查询操作 1.简单查询 2.条件查询 3.排序 一.增加表中数据 1.无自增列时 1.指定字段添加数据 给表中的部分列添加数据:值的顺序必须跟指定列的顺序保持一致 语法:insert into 表名(列1,列2,...) values(值1,值2,...) 2.默认添加数据 向表中的所有列添加数据:值的顺序必须跟字段顺序保持一致 语法:insert i

  • MySQL 普通索引和唯一索引的区别详解

    1 概念区分 普通索引和唯一索引 普通索引可重复,唯一索引和主键一样不能重复. 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,我们人为规定该字段不得重复,那么就使用唯一索引.(一般设置学号字段为主键) 主键和唯一索引 主键保证数据库里面的每一行都是唯一的,比如身份证,学号等,在表中要求唯一,不重复.唯一索引的作用跟主键的作用一样. 不同的是,在一张表里面只能有一个主键,主键不能为空,唯一索引可以有多个,唯一索引可以有一条记录为空,即保证跟别人不一样就行. 比如学生表,在学校里

随机推荐