首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何写出更快的 SQL (db2)

下面我就自己的工作经验,分享一下如何写出更快的 SQL 一、查看执行计划来选择更快的 SQL 在写 SQL 的初期,你可能不知道到底是使用 UNION ALL 好还是 FULL JOIN 好,是使用 EXISTS...写法二:使用 UNION ALL 和 NOT EXISTS SELECT A.CUSTID, a.CUSTNAME FROM CUSTINFO_A A UNION ALL SELECT...WHERE A.CUSTID = b.CUSTID) 在 db2 的说明查询中查看其成本: ?...任何在 where 子句中使用 IS NULL 或 IS NULL 的语句优化器是不使用索引的。 联接列 对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。...用 UNION - ALL 替换 UNION ( 如果有可能的话) UNION ALL 将重复输出两个结果集合中相同记录,UNION 将对结果集合排序,这个操作会使用到 SORT_AREA_SIZE 这块内存

2.2K20

SQL优化总结之一

一、实践中如何优化mysql   1) SQL语句及索引的优化   2) 数据库表结构的优化   3) 系统配置的优化   4) 硬件优化 二、索引的底层实现原理和优化 2.1 底层实现   在DB2数据库中索引采用的是...DB2先查询索引,然后通过索引里记录的指针,直接访问表的数据页。 B+树是应数据库所需而出现的一种B树的变形树。...2) 如果无需排除重复值或是操作集无重复则用UNION ALL, UNION更费事(因为要比较)   UNION因为会将各查询子集的记录做比较,故比起UNION ALL,通常速度都会慢上许多。...还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNION ALL,如xx模块的某个查询程序就曾经存在这种情况,由于语句的特殊性...,在这个脚本中几个子集的记录绝对不可能重复,故可以改用UNION ALL)连接操作  3) 避免在WHERE子句中使用in,not in,or或者having。

1.5K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据库优化面试题

    1.实践中如何优化mysql 1) SQL语句及索引的优化 2) 数据库表结构的优化 3) 系统配置的优化 4) 硬件优化 2.索引的底层实现原理和优化 在 DB2 数据库中索引采用的是 B+ 树的结构...DB2 先查询索引,然后通过索引里记录的指针,直接访问表的数据页。 B+树。B+树是应数据库所需而出现的一种B树的变形树。...DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序 2) 如果无需排除重复值或是操作集无重复则用UNION ALL, UNION更费事(因为要比较) UNION因为会将各查询子集的记录做比较...还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNION ALL,如xx模块的某个查询程序就曾经存在这种情况,见,由于语句的特殊性...,在这个脚本中几个子集的记录绝对不可能重复,故可以改用UNION ALL)连接操作 3) 避免在WHERE子句中使用in,not in,or 或者having。

    4.1K21

    oracle 笔记

    Oracle 将null值转化为其他值 我个人认为数据库中不应该有null值,因为他颠覆了二值逻辑结构(即:真和假),出现了三值逻辑结构(即:真、假和未知)。...由于null,我们的SQL语句很有可能出现意想不到的结果。此外null值和其他值进行数值运算的时候也会带来问题。...,'@') FROM EMPLOYEE; Oracle 采集样本数据 我们经常会遇到这样的情况,想看看某个表中的若干条数据,如10 条。...UNION 用来求两个集合的并集,并去掉重复值 UNION ALL 用来求两个集合的并集 INTERSECT 用来求两个集合的交集,并去掉重复值 MINUS 用来求在第一个集合中存在...---UNION SELECT * FROM TEST_LEFT UNION SELECT * FROM TEST_RIGHT; ---结果 A B C D E ---UNION ALL SELECT

    4.1K30

    【数据库】SQL零基础入门学习

    正是因为有了数据库后,我们可以直接查找数据。 例如你每天使用余额宝查看自己的账户收益,就是从数据库读取数据后给你的。...DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。...当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。...数值1 and 数值2 9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息...10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.

    14210

    【MySQL】多表联合查询、连接查询、子查询「建议收藏」

    内连接查询 内连接查询是最常见的连接查询,内连接查询可以查询两张或两张以上的表 内连接:[inner] join:从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果...联合查询order by的使用 在联合查询中: order by不能直接使用(不能出现两次),需要对查询语句使用括号才行; select *from student where sex="woman...; 也就是说,order by不能直接出现在union的子句中,但是可以出现在子句的子句中。...【3】子查询 通常我们在查询的SQL中嵌套查询,称为子查询。...子查询通常会使复杂的查询变得简单,但是相关的子查询要对基础表的每一条数据都进行子查询的动作,所以当表单中数据过大时,一定要慎重选择 带in关键字的子查询 使用in关键字可以将原表中特定列的值与子查询返回的结果集中的值进行比较

    4.8K20

    hive优化大全-一篇就够了

    裁剪所对应的参数项为:hive.optimize.cp=true(默认值为真) 4.2分区裁剪   可以在查询的过程中减少不必要的分区。...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 中的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式中也可以达到效果。...5.2无效ID在关联时的数据倾斜问题   问题:日志中常会出现信息丢失,比如每日约为 20 亿的全网日志,其中的 user_id 为主 键,在日志收集过程中会丢失,出现主键为 null 的情况,如果取其中的...调优结果:经过测试,并未出现 union all 的 Hive Bug,数据是一致的。...消灭子查询内的 JOIN SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t4 UNION ALL SELECT * FROM t2 JOIN

    1.9K20

    Hive性能优化(全面)

    裁剪所对应的参数项为:hive.optimize.cp=true(默认值为真) 3.2分区裁剪 可以在查询的过程中减少不必要的分区。...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 中的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式中也可以达到效果。...4.2无效ID在关联时的数据倾斜问题 问题:日志中常会出现信息丢失,比如每日约为 20 亿的全网日志,其中的 user_id 为主 键,在日志收集过程中会丢失,出现主键为 null 的情况,如果取其中的...调优结果:经过测试,并未出现 union all 的 Hive Bug,数据是一致的。...消灭子查询内的 JOIN SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t4 UNION ALL SELECT * FROM t2 JOIN

    4.3K40

    union和union all,你使用哪一个?

    我们可以使用set global variables的方法临时设置这个参数的值为0,那么就意味着动态的慢慢主动将buffer pool中的脏页刷回磁盘,而不是通过关闭MySQL被动刷新,这个参数的默认值是...也就是说,不会出现内存临时表。这个,可能是这个SQL的一个重要优化点。...07 将业务SQL改写为union all的方法重试 经过了上面的测试,跟业务方协商,将SQL改为了union all的方法手工执行了一两次,也就是从: select * from t1 union...select * from t2 union ... select * from t20 改为: select * from t1 union all select * from t2 union all...all的方法代替union的方法,当然,如果表特别大,不建议使用union的方式进行查询,还是单个表进行查询比价方便 3、如果表中的字段有时间字段,定时任务取每天的增量数据可能比全量数据更加容易一些。

    72430

    数据库性能优化之SQL语句优化

    推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。...推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。...select * from gc_dfys union all select * from ls_jg_dfys (g) 联接列 对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的...(28) 用UNION-ALL 替换UNION ( 如果有可能的话): 当SQL 语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序....如果用UNION ALL替代UNION, 这样排序就不是必要了. 效率就会因此得到提高. 需要注意的是,UNION ALL 将重复输出两个结果集合中相同记录.

    5.7K20

    MySQL索引优化,explain详细讲解

    本文源自 公-众-号 IT老哥 的分享 IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章 前言:这篇文章主要讲 explain 如何使用,还有 explain 各种参数概念,之后会讲优化...包含以下几种值 simple primary subquery derived union union result simple 简单的 select 查询,查询中不包含子查询或者 union 查询...在多表查询中,如 T1 和 T2,T1 中的一行记录,在 T2 中也只能找到唯一的一行,说白了就是 T1 和 T2 关联查询的条件都是主键索引或者唯一索引,这样才能保证 T1 每一行记录只对应 T2...all 没用到索引,单纯的将表数据全部都遍历一遍,查找到符合条件的数据 六、possible_keys --- 此次查询中涉及字段上若存在索引,则会被列出来,表示可能会用到的索引,但并不是实际上一定会用到的索引...如果同时出现 using where,表明索引被用来执行索引键值的查找;如果没有同时出现 using where,表面索引用来读取数据而非执行查找动作。

    1.6K21

    MySQL语法之union和union all,你使用哪一个?

    ,该环境的系统负载成阶梯状线性提升,从5天前开始,逐渐增高,今天负载已经到达了10以上。...我们可以使用set global variables的方法临时设置这个参数的值为0,那么就意味着动态的慢慢主动将buffer pool中的脏页刷回磁盘,而不是通过关闭MySQL被动刷新,这个参数的默认值是...其实,在MySQL中,还可以使用union distinct来显示的指定union查询去重,union distinct语法和单独union的语法执行结果是一样的,只不是加了distinct之后,更加容易理解...all的方法手工执行了一两次,也就是从: select * from t1 union select * from t2 union ... select * from t20 改为: select...union all的方法代替union的方法,当然,如果表特别大,不建议使用union的方式进行查询,还是建议拆分成单个表进行查询,然后再汇总结果 3、如果表中的字段有时间字段,定时任务取每天的增量数据可能比全量数据更加容易一些

    1K20

    Mysql优化-索引

    使用方法,在select语句前加上explain就可以了: 如: explain select surname,first_name form a,b where a.id=b.id EXPLAIN列的解释...union一样,出现在union 或union all语句中,但是这个查询要受到外部查询的影响E:union result:包含union的结果集,在union和union all语句中,因为它不需要参与查询...key 查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。...或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。...如果内表的数据量比较大,就可能出现这个。 loosescan(m..n) 5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时,就可能出现这个。

    1.3K50

    mysql explain ref列_MySQL EXPLAIN详解

    key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确。...通过把所有rows列值相乘,可粗略估算整个查询会检查的行数 Extra 额外信息,如using index、filesort等 id id是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id...如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。...NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。...Using join buffer:该值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

    3.9K60

    mysql中的查询计划及sql语句性能分析

    select_type列的值主要有以下6种情况: ①、SIMPLE:简单的select查询,查询中不包含子查询或者UNION ②、PRIMARY:查询中若包含任何复杂的子查询,那么最外层的查询则被标记为...图片 ⑤、UNION:若第二个select出现在union之后,则被标记为union。若union包含在from子句的子查询中,外层select将被标记为deriver。...⑥、UNION RESULT:从union表获取结果select。两个UNION合并的结果集在最后。 图片 table **描述:**显示当前查询的数据是关于哪张表的。...图片 ALL 将表中的所有数据进行了扫描(全表扫描),从硬盘当中读取数据。如果出现了All 且数据量非常大,那么该条sql必须去做优化的。...如果同时出现了Using where 表明索引被用来执行索引键值的查找。如果没有同时出现Using where 表明索引 用来读取数据而非执行查找动作。

    2.1K30

    MySQL语法之union和union all,你使用哪一个?

    我们可以使用set global variables的方法临时设置这个参数的值为0,那么就意味着动态的慢慢主动将buffer pool中的脏页刷回磁盘,而不是通过关闭MySQL被动刷新,这个参数的默认值是...其实,在MySQL中,还可以使用union distinct来显示的指定union查询去重,union distinct语法和单独union的语法执行结果是一样的,只不是加了distinct之后,更加容易理解...all的方法手工执行了一两次,也就是从: select * from t1 union select * from t2 union ... select * from t20 改为: select...* from t1 union all select * from t2 union all ... select * from t20 ; 重新测试这个数据联合查询的SQL,发现执行时间从之前的数个小时变为了...union all的方法代替union的方法,当然,如果表特别大,不建议使用union的方式进行查询,还是建议拆分成单个表进行查询,然后再汇总结果 3、如果表中的字段有时间字段,定时任务取每天的增量数据可能比全量数据更加容易一些

    1.2K30

    Hive性能优化统计每日IP CREATE TABLE ip_2014_12_29 AS SELECT COUNT(DISTINCT ip) AS IP FROM logdfs WHERE logda

    裁剪所对应的参数项为:hive.optimize.cp=true(默认值为真) 4.2分区裁剪   可以在查询的过程中减少不必要的分区。...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 中的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式中也可以达到效果。...5.2无效ID在关联时的数据倾斜问题   问题:日志中常会出现信息丢失,比如每日约为 20 亿的全网日志,其中的 user_id 为主 键,在日志收集过程中会丢失,出现主键为 null 的情况,如果取其中的...调优结果:经过测试,并未出现 union all 的 Hive Bug,数据是一致的。...消灭子查询内的 JOIN SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t4 UNION ALL SELECT * FROM t2 JOIN

    1.7K50

    explain的属性详解与提速百倍的优化示例

    在MySQL中,可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。...dependent union:与union一样,出现在union 或union all语句中,但是这个查询要受到外部查询的影响。...union result:包含union的结果集,在union和union all语句中,因为它不需要参与查询,所以id字段为null。...type为index_merge时,这里可能出现两个以上的索引,其他的type这里只会出现一个。 key_len 使用到索引字段的长度。...哪些列或常量被用于查找索引列上的值。 rows MySQL根据表统计信息及索引选用情况,估算mysql查询过程中遍历的行数,不是准确值。

    1.4K30

    为什么你写的sql查询慢?为什么你建的索引常失效?

    MySQL是关系性数据库中的一种,查询功能强,数据一致性高,数据安全性高,支持二级索引。但性能方面稍逊与MongoDB,特别是百万级别以上的数据,很容易出现查询慢的现象。...MySQL在4.1版本之前文件排序是采用双路排序的算法,由于两次扫描磁盘,I/O耗时太长。后优化成单路排序算法。...:查询中若包含任何复杂的子查询,最外层查询则被标记为primary subquery:在select或where 列表中包含了子查询 derived:在from列表中包含的子查询被标记为derived...union:若第二个select出现在union之后,则被标记为union,若union包含在from子句的子查询中,外层select将被标记为:derived union result:从union...如果同时出现Using where,表明索引被用来执行索引键值的查找。如果没有同时出现Using where,表示索引用来读取数据而非执行查找动作。

    61510
    领券