sql语句or与union all的执行效率比较

看到一篇文章是讲sql语句or与union all的执行效率比较的,以前没怎么注意这个问题,感觉文章写的不错,转来一看。

文章原链接:http://www.cunyoulu.com/zhuanti/qtstudy/20081124orunion.htm

sql语句or与union all的执行效率比较

当SQL语句有多个or语句时,可以考虑使用union或者union all代替来提高速度。使用or的SQL语句往往无法进行优化,导致速度变慢。但这不是固定的,有时候使用or速度会更快些。具体情况还要经过测试为准。如果加索引的话,也可能实现速度优化。

实验表格如下,实际数据有2,000,000条,从里面返回大约最多1000行左右的数据。

X Y Inline CDP T
12002400 5801000 300 300 3400
12002408 5801005 300 301 3402
12002416 5801010 300 302 3404
12002424 5801015 300 303 3406
... ... ... ... ...

or语句(部分节选)

SELECT * FROM tablename where (cdp= 300 and inline=301) or (cdp= 301 and inline=301) or (cdp= 302 and inline=301) or (cdp= 303 and inline=301) or (cdp= 304 and inline=301) or (cdp= 305 and inline=301) or (cdp= 306 and inline=301) or (cdp= 307 and inline=301)

union all语句(部分节选)

SELECT * FROM tablename where (inline= 300 and cdp=300) union all SELECT * FROM tablename where (inline= 301 and cdp=300) union all SELECT * FROM tablename where (inline= 302 and cdp=300) union all SELECT * FROM tablename where (inline= 303 and cdp=300)

返回不规则的900条数据,前者用了60多秒,后者用了8秒左右。

时间: 2024-12-19 15:05:46

sql语句or与union all的执行效率比较的相关文章

sql server 各种查询sql语句的分页存储过的执行效率

create database data_test on primary ( name='data_test_data', filename='C:\data_test_data.mdf', size=5mb, maxsize=100mb, filegrowth=15% ) log on ( name='data_test_log', filename='C:\data_test_log.ldf', size=2mb, filegrowth=1mb ) go use data_test go c

SQL语句在数据库中是如何执行的

第一步:应用程序把查询SQL语句发给服务器端执行 我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理. 第二步:服务器解析请求的SQL语句 SQL计划缓存,经常用查询分析器的朋友大概都知道这样一个事实,往往一个查询语句在第一次运行的时候需要执行特别长的时间,但是如果你马上或者在一定时间内运行同样的语句,会在很短的时间内返回查询结果.原因是: 服务器在接收到查询请求后,并不会马上去数据库查询,而是在数据库中的计划缓存中找是否有相对应的执行计划.如果存在,

PHP里的SQL语句是否正确,是否正确执行的检测方法。

PHP将传过来的值插入数据库,或者向数据库传值的时候,往往出现PHP没有报错,但是数据库并未更新的情况.这个时候 ,你可以用ECHO  打印输POST 或者GET 传过来的值,打印要执行的SQL语句,然后去mysql执行一遍,用mysq_error()函数 显示错误.例 <?php error_reporting(0); $username_value = $_POST['username_input']; $email_value = $_POST['email_input']; $passw

表单中通过sql语句,一次操作,执行多个sql,返回多个值的方法

范例: <BILLC_EX_INT01 datatype="float" name="妥投单量" sql="SELECT ISNULL(SUM(EXBD_EX_NUM001),0) AS RESULT FROM TEX_BUSINESS_DATA WHERE (EXBD_EX_STR002='$current()/BILLC_EX_STR003$') AND (EXBD_EX_STR003='妥投')▓BILLC_EX_INT02◆SELECT SU

linux之SQL语句简明教程---UNION

UNION 指令的目的是将两个 SQL 语句的结果合并起来.从这个角度来看, UNION 跟 JOIN有些许类似,因为这两个指令都可以由多个表格中撷取资料. UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类.另外,当我们用 UNION 这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT). UNION 的语法如下: [SQL 语句 1] UNION [SQL 语句 2]; 假设我们有以下的两个表格, Store_Information 表格 S

linux之SQL语句简明教程---UNION ALL

UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起. UNION ALL 和UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复. UNION ALL 的语法如下: [SQL 语句 1] UNION ALL [SQL 语句 2]; 我们用和上一页同样的例子来显示出 UNION ALL 和 UNION 的不同.同样假设我们有以下两个表格, Store_Information 表格 Store_Name Sales Txn_Da

SQL语句中:UNION与UNION ALL的区别

UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复 1.UNION 的语法如下: [SQL 语句 1] UNION [SQL 语句 2] 2.UNION ALL 的语法如下: [SQL 语句 1] UNION ALL [SQL 语句 2] 效率:UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. 1.对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union Al

C#代码验证sql语句是否正确(只验证不执行sql)的方法

转自 :http://www.jquerycn.cn/a_15010 为大家介绍如何用C#验证sql语句的正确性,就像sql查询分析器中的检测代码功能一样,有需要的朋友,可以参考下. 需要用到如下的知识:SET PARSEONLY检查每个 Transact-SQL 语句的语法并返回任何错误消息,但不编译和执行语句.SET PARSEONLY { ON | OFF }当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句.当 SET PARSEONLY 为 OFF 时,SQ

java实现sql语句批处理

Statement实现批处理: 优点:能够处理多种不同结构的sql语句 缺点:不能预处理,执行效率较差.对于参数不同的同一条sql语句需要多次调用addBatch() package com.itheima.batch; import java.sql.Connection; import java.sql.Statement; import org.junit.Test; import com.itheima.util.DBUtil; public class StatementBatch {