SQL优化技巧

1.去除在谓词列上编写的任何标量函数

2.去除在谓词列上编写的任何数学运算

3.SQL语句的Select部分只写必要的列

4.尽可能不用Distinct

5.尽量将In子查询重写为Exists子查询

6.确保宿主变量定义为与列数据类型匹配

7.由于优化工具处理“或”逻辑可能有问题,所以尽量采用其他方式重写

8.确保所处理的表中数据分布和其他统计信息正确并反映当前状况

9.尽可能用Union All取代Union

10.考虑使用硬编码还是使用宿主变量

11.尽可能减少DB2的SQL请求

12.尽量将区间谓词重写为Between谓词

13.考虑使用全局临时表

14.优先使用Stage 1谓词而不是Stage 2谓词

15.记住(某些)谓词的顺序很重要

16.多个子查询排序

17.索引关联子查询

18.了解DB2 Explain工具

19.使用工具进行监控

20.采用提交和重启策略

21.实现优良的索引设计

22.避免与非列表达式不一致

23.所有筛选逻辑放在应用代码之外

24.确保涉及Min和Max的子查询谓词要处理可能返回Null的情况

25.如果查询只选择数据,一定要报游标处理写为For Fetch Only(只获取)或For Read Only(只读)

26.避免只是为了帮助确定代码逻辑应当执行更新还是插入而从表中选择一行

27.避免只是为了得到更新值而从表中选择一行

28.利用动态SQL语句缓存

29.避免使用Select *

30.当心可以为Null的列,还要当心SQL语句可能从数据库管理器返回Null

31.尽量减少执行打开和关闭游标的次数

32.SQL中要避免非逻辑

33.使用关联ID来保证更好的可读性

34.保证表和索引文件合法而且有组织

35.充分利用Update Where Current of Cursor和Delete Where Current of Cursor

36.使用游标时,利用多行获取、多行更新和多行插入来使用ROWSET定位和获取

37.了解锁定和隔离级别

38.了解Null处理

39.编程时要考虑性能

40.让SQL来处理

41.使用Lock Table

42.考虑OLTP前端处理

43.考虑使用动态可滚动游标

44.利用物化查询表改善响应时间(只使用动态SQL)

45.结合Select的Insert

46.充分利用多行获取

47.充分利用多行插入

48.充分利用多行更新

49.充分利用多行删除

50.在Select子句中使用标量全选

51.在动态SQL中充分利用REOPT ONCE和REOPT AUTO,在静态SQL中充分利用REOPT VARS和REOPT ALWAYS

52.标识易失表

53.使用ON COMMIT DROP改进

54.使用多个Distinct

55.充分利用反向索引扫描

56.当心Like语句

57.正确地设置聚簇索引

58.必要时使用Group By表达式

59.当心表空间扫描

60.不要问你已经知道的信息

61.注意查询中表的顺序

62.使用左外联接而不是右外联接

63.检查不存在的行

64.使用存储过程

65.不要只是为了排序而选择某一列

66.尽可能现在结果集

67.批量删除是充分利用DB2 V8的改进DISCARD功能

68.充分利用DB2 LOAD工具完成批量插入

69.注意视图、嵌套表表达式和公共表表达式的物化

70.考虑压缩数据

71.考虑并行性

72.让STDDEV、STDDEV_SAMP、VAR和VAR_SAMP函数远离其他函数

73.考虑使用ROWID数据类型(V8)或RID函数(V9)直接访问行

74.用真实统计和一定的数据测试查询以反映性能问题

75.在Where子句中指定前导索引列

76.尽可能使用Where而不是Having完成筛选

77.尽可能考虑Index Only处理

78.DB2 V9中表达式上的索引

79.考虑DB2 V9 Truncate语句

80.在子查询中使用DB2 V9 Fetch First和Order by

81.利用DB2 V9乐观锁定

82.使用DB2 V9Merge语句

83.了解DB2 NOFOR预编译选项

84.考虑Select Into中使用Order By

85.尽量编写布尔项谓词

86.编写传递闭包

87.避免使用Order By排序

88.尽量可能使用联接而不是子查询

89.当心Case逻辑

90.在Order By子句中充分利用函数

91.了解你的DB2版本

92.了解日期运算

93.了解大容量插入选项

94.了解Skip Locked Data(V9)避免锁定

95.对输入流排序

96.如果需要真正的唯一性,可以使用V8 Generate_Uinque函数

97.了解声明临时表的新选项。

98.执行Get Diagnostics时需要注意

99.适当地对In列表排序

100.结合Select的Update和Delete(V9)

101.只在必要时执行SQL语句

102.充分利用内存中的表

103.避开通用型SQL语句

104.避免不必要的排序

105.了解表达式和列函数

106.结合使用谓词时要注意

107.为搜索查询增加冗余谓词

108.充分利用改进的动态缓存(V10)

109.尝试当前提交来避免锁

110.尝试使用系统时态表获取历史数据

111.尝试使用业务时态表获取历史数据

112.了解分级函数

113.充分利用扩展指示符

114.得到更大的时间戳精度

115.尝试Index Includes

116.使用With Return to Client

DB2 SQL提示

1.在SQL语句的最后使用Optimize for 1 Row语句

2.为SQL查询增加A.PKEY = A.PKEY谓词,这里PKEY等于表的主键列

3.更换索引选择

4.改变表处理顺序

5.使用分布式动态SQL

SQL标准和原则

面向COBOL开发人员

面向SQL开发人员

DB2 SQL性能调优秘笈的更多相关文章

  1. spark2.+ sql 性能调优

    1.在内存中缓存数据 性能调优主要是将数据放入内存中操作,spark缓存注册表的方法 版本 缓存 释放缓存 spark2.+ spark.catalog.cacheTable("tableN ...

  2. SQL性能调优基础教材

    一.数据库体系结构 1.       Oracle数据库和实例 数据库:物理操作系统文件或磁盘的集合. 实例:一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程 ...

  3. mysql之sql性能调优

    sql调优大致分为两步:1 如何定位慢查询   2 如何优化sql语句. 一:定位慢查询 -- 显示到mysql数据库的连接数 -- show status like 'connections'; - ...

  4. OCP读书笔记(15) - 管理SQL性能调优

    SQL Tuning Advisor(STA): 使用oracle提供的程序包进行sql优化 SQL> conn scott/tiger SQL), name )); SQL> inser ...

  5. SQL 性能调优日常积累

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE 的解析器按照从右到左 ...

  6. SQL 性能调优日常积累【转】

    阅读目录 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) (2)WHERE子句中的连接顺序 (3)SELECT子句中避免使用 ‘ * ‘ (4)减少访问数据库的次数 (5)在SQL*Plu ...

  7. SQL优化二(Sql性能调优)

    一·.前言:这篇博文内容非原创,是我们公司的架构师给我们做技术培训的时候讲的内容,我稍微整理了下,借花献佛.这篇博文只是做一个大概的科普介绍,毕竟SQL优化的知识太大了,几乎可以用一本书来介绍.另外, ...

  8. SQL性能调优

    部分转自:http://www.cnblogs.com/luckybird/archive/2012/06/11/2544753.html 及http://www.cnblogs.com/kissdo ...

  9. 【翻译】Flink Table Api & SQL — 性能调优 — 流式聚合

    本文翻译自官网:Streaming Aggregation  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table ...

随机推荐

  1. Ubuntu安装Mysql+Django+MySQLdb

    安装Mysql sudo apt-get install mysql-server mysql-client root@IdeaPad:/# mysql -u root -p Enter passwo ...

  2. IOS中如果使用RGB实现背景色

    在开发的过程中.我们往往会碰到图片很多的情况.这时候我们的程序打包就会变得很大.一些纯色的图片可以用RGB来实现.这样可以减少内存的占用MAC本中有数码测色计这个功能.通过这个我们可以获得图片的RGB ...

  3. java的nio之:java的nio系列教程之selector

    一:Java NIO的selector的概述===>Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程 ...

  4. PHP实现动态规划背包问题

    有一堆货物,有各种大小和价值不等的多个物品,而你只有固定大小的背包,拿走哪些能保证你的背包带走的价值最多 动态规划就是可以记录前一次递归过程中计算出的最大值,在之后的递归期间使用,以免重复计算. &l ...

  5. EDIUS设置采集磁带的方法

    EDIUS作为一款应用广泛的非线性视频编辑软件,将磁带记录的视频信号采集为可以编辑的数字视频信号的使用还是十分广泛的,毕竟磁带不同于数字存储单元,它在批量化的视频录制中表现出很大的优势.下面,小编跟大 ...

  6. Java 笔试题集锦

    1.Java 不需要使用构造函数来创建对象的方法有哪些? 2.Java 创建多线程有哪些方法?你最喜欢哪一个?为什么? 3.Java

  7. call和apply的差别

    Call(thisArg,arg1,arg2,-..) apply(thisArg,[arg1,arg2-.])

  8. Dom之标签属性

    一.标签默认属性的查找与修改 查找 <!DOCTYPE html><html lang="en"><head> <meta charset ...

  9. ios 获取屏幕的属性和宽度

    app尺寸,去掉状态栏 CGRect r = [ UIScreen mainScreen ].applicationFrame; r=0,20,320,460 屏幕尺寸 CGRect rx = [ U ...

  10. FileMode文件模式

    一.FileMode.Append Append追加: 如果文件存在,则打开文件,把指针指到文件的末尾:如果不存在,则新建文件 二.FileMode.Create Create:新建 如果文件存在,则 ...