DB2解决锁升级经验

>1。 初步判断是select较多,还是insert较多
>如果是select较多,建议建立索引;
>如果是insert较多,则建立索引不一定能提高效率,反而相应的操作要在索引和表上
>进行两次,降低了效率。可以insert之后再建立索引。
>[索引设计建议]
>缺省情况下建立的索引是非集群索引,但有时并不是最佳的;
>合理的索引设计要建立在对各种查询的分析和预测上.
>(1) 有大量重复值、且经常有范围查询(between,>,<,>=,<=)和order by、group by
>发生的列,可考虑建立群集索引;
>(2) 经常同时存取多列,且每列都含有重复值,可考虑建立组合索引,注意:要尽量
>使关键查询形成索引覆盖,其前导列一定是使用最频繁列;
>[解释]:
>(1) 在非群集索引下,数据在物理上随机存放在数据页上,在范围查找时,必须执行
>一次表扫描才能找到规定范围内的全部行;
>(2)在群集索引下,数据在物理上按顺序在数据页上,重复值也排列在一起,因而在范
>围查找时,可以先找到规定范围的期末点,且只在这个范围内扫描数据页,避免了大
>范围扫描,提高了查询速度。
>
>2。对于Select操作
>尽量不要使用"select *",这样会执行对整个表的查找;
>[出现位置]
>      在提供的唯一一段select的操作的SQL语句中,出现了迭代的"select *
>from"操作;
>[改进]
>      最好是根据表中的名称,显示地查找每一列。
>
>3。对于where子句的连接顺序
>表之间的连接必须写在其他where条件之前,那些可以过滤掉大量记录的条件必须写在
>where子句的末尾。
>[出现位置]
>      在提供的四段语句中,出现了大量的左连接(left join)操作和where操作
>[改进]
>      对于where子句,将可以过滤掉大量记录的条件写在最后,依次类推;尽量减少
>进行left join的记录的条数。
>
>4。group by优化
>在提供的四段语句中,大量存在group by语句
>[改进]
>      可以将不需要的记录在group by之前过滤掉。
>
>5。避免在索引列上使用IS NULL和IS NOT NULL
>[出现位置]
>      在提供的SQL语句中,出现了一些IS NOT NULL,如果在这些列上已经建立了索
>引,该语句将会造成索引失效。
>[改进]
>      可以根据该列的值的属性修改,例如,如果是整型,可以改为>=0。
>
>6。尽量多使用commit
>只要有可能,就在程序中对每个delete,insert,update操作尽量多使用commit,这
>样系统性能会因为commit所释放的资源而大大提高。
>
>--------------------------------------------------------------
>此外,db2中有分析SQL语句的工具 Visual Explain (db2expln)
>你可以在图形界面下使用控制中心 - > 右键点击相应的数据库 - > 选择"说明
>SQL"(Visual Explain).
>或者在命令行的方式下,执行db2expln.
>
 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值