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秒左右。

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4454292.html ,如需转载请自行联系原作者
相关文章
|
10天前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
|
1月前
|
SQL Web App开发 安全
CTF-Web安全--SQL注入之Union注入详解
CTF-Web安全--SQL注入之Union注入详解
|
3月前
|
SQL 数据库
20、绕过去除and、or、union select、空格的sql注入
20、绕过去除and、or、union select、空格的sql注入
32 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL优化:12种提升SQL执行效率的有效方法
在数据库管理和优化的世界里,MySQL作为一个流行的关系型数据库管理系统,其性能优化是任何数据密集型应用成功的关键。优化MySQL数据库不仅可以显著提高SQL查询的效率,还能确保数据的稳定性和可靠性。
229 0
|
5月前
|
SQL 数据库
深入理解 SQL UNION 运算符及其应用场景
SQL UNION运算符用于组合两个或多个SELECT语句的结果集。 每个UNION中的SELECT语句必须具有相同数量的列。 列的数据类型也必须相似。 每个SELECT语句中的列也必须按照相同的顺序排列。
54 1
|
7月前
|
SQL 测试技术 数据库
软件测试|SQL中的UNION和UNION ALL详解
软件测试|SQL中的UNION和UNION ALL详解
48 0
|
7月前
|
SQL
08SQL - union 操作符
08SQL - union 操作符
25 0
08SQL - union 操作符
|
9月前
|
SQL 关系型数据库 数据库
|
10月前
|
SQL 索引
|
10月前
|
SQL
为什么两个执行很快的SQL,union之后特别慢
UNION获取两个数据集并返回唯一重叠。换句话说,它花费时间去除重复。 所以如果只是想取两个SQL的结果,改成使用union all,不会有去重操作 如果还是想去重,可以在union all之后再包一层查询,使用distinct