假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢

比如: select id, name from table1 where name = ‘x‘ union all select id, name from table2 where name = ‘x‘      

select * from (select id, name from table1 union all select id, name from table2) where name = ‘x‘.

哪一种方式性能更好一些呢? 希望高手能详细说明下, 并且考虑到有索引和无索引的情况

结果:

先 JOIN 缩小数据集,然后 用UNION 更快

建议使用先where再union的方式,通过过滤得到小的数据量,然后再去和其他数据做join 等处理,这应该是数据处理的一个原则。当然了,将过多的数据抓过来,经过了层层处理,最后再通过条件去过滤,这也是效率低下语句的通病。

不过,对于你的两条语句,有可能他们的执行计划都是一样的,不管有没有索引的情况。

先用where过滤,再用union快......可以用执行计划查看COST...
也可以通过实际速度来查看...

时间: 2024-09-30 06:16:00

假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢的相关文章

msyql join语句执行原理

首先,我建了一个表t2,里面有1000条数据,有id,a,b三个字段,a字段加了索引 然后我又建立一个t1表,里面有100条数据,和t2表的前一百条数据一致,也是只有id,a,b三个字段,a字段加了索引 如下图 然后我们看这条语句,为了不影响效果,这里我用了STRAIGHT_JOIN ,也就是在这条语句里会把t1当做驱动表 select * from t1 STRAIGHT_JOIN t2 on t1.a=t2.a 那么这条语句的执行流程就是这样的 1.从t1表查询出一行数据R 2.查出R这行数

mysql必知必会笔记

一.了解sql 数据库是一个以某种有组织的方式存储的数据集合. 数据库基础 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件). 表(table) 某种特定类型数据的结构化清单. 模式(schema) 关于数据库和表的布局及特性的信息. 列(column) 表中的一个字段.所有表都是由一个或多个列组成的. 数据类型(datatype) 所容许的数据的类型.每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据. 行(row) 表中的一个记录. 主键(primar

《MySQL必知必会》读书笔记

一.了解MySQL 1.什么是数据库? 数据库是一种以某种有组织的方式存储的数据集合. 2.模式(schema):关于数据库和表的布局及特性的信息. 3.列:正确的将数据分解为多个列极为重要.通过把它分解开,才有可能利用特定的列对数据进行排序和过滤. 4.主键(primary key):一列,其值能够唯一区分表中每个行,用来表示一个特定的行.应该保证创建的每个表具有一个主键,以便于以后的数据操纵和管理. 5.外键: 6.SQL语句不区分大小写,但是开发人员通常对所有SQL关键字大写,而对所有列和

数据库查询优化(转载)

1         使用SET NOCOUNT ON 选项: 缺 省地,每次执行SQL语句时,一个消息会从服务端发给客户端以显示SQL语句影响的行数.这些信息对客户端来说很少有用.通过关闭这个缺省值,你能减少在 服务端和客户端的网络流量,帮助全面提升服务器和应用程序的性能.为了关闭存储过程级的这个特点,在每个存储过程的开头包含“SET NOCOUNT ON”语句. 2         正确使用UNION和UNION ALL: 许 多人没完全理解UNION和UNION SELECT是怎样工作的,因

怎样查出SQLServer的性能瓶颈

--王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url]--原帖地址 如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个精密的科学.即使是,对于为最佳的性能找到最佳的配置也是很困难的.这是因为对于调优来说很少东西是绝对的.例如,一个性能调优可能对某一方面有用,可是却会影响其他的性能. 我曾经做过DBA,在最后7年的日子里,我总结了一套SQLServer调优的清单.当第一次进行SQLServer性能调优的时候,可以用它来作为一

Mysql入门实战中

前面一章主要讲解了mysql的入门学习,包括数据库,表的管理,以及对数据的增删改,本章主要介绍mysql最重要的语句select的用法,将select的大部分用法进行分别讲解. <!–more–> 全部代码下载(csdn):链接 Github链接:链接 1.select语句简单介绍: select语句从语义上就可以知道主要是用来进行查询的 数据表都已经创建起来了,我们已经插入了许多的数据,我们可以用自己喜欢的方式对数据表里面的信息进行检索和显示了.比如说显示我们建立的表student所有的数据

【转】T-SQL 教程

1 USE [test] 2 GO 3 /****** Object: StoredProcedure [dbo].[PageIndex] Script Date: 12/07/2011 10:26:36 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 ALTER PROCEDURE [dbo].[PageIndex] 9 ( 10 @Tbname varchar(100),--表名字 11 @Strfield

[MySQL Reference Manual] 8 优化

8.优化 8.优化... 1 8.1 优化概述... 1 8.2 优化SQL语句... 1 8.2.1 优化SELECT语句... 1 8.2.1.1 SELECT语句的速度... 1 8.2.1.2 WHERE子句优化... 1 8.2.1.3 Range优化... 1 8.2.1.4 索引合并(Index Merge)优化... 1 8.2.1.5 引擎Pushdown条件优化... 1 8.2.1.6 索引条件Pushdown优化... 1 8.2.1.7 使用索引扩展... 1 8.2.

数据库性能调优(转)

数据库性能调优 SQLServer性能监控 这套性能优化的清单将至少准科学的帮助你找出你的SQLServer任何明显的性能问题.说是这样说,SQLServer的性能调优仍然是很困难的.我试图用这套清单去找出“容易”的sqlserver性能问题,困难的留待稍后.我这样做是因为很容易将容易和困难的的性能调优问题搞混.通过列出一个“容易”的性能调优范围,就很容易的将这些问题解决,一旦解决了这些容易的问题,那么你就能集中去解决更困难的问题. 使用这个SQLServer性能调优清单的一个好处是,它将不仅仅