本文用几点了说明DB数据库优化需掌握几条基本策略
对后续用到的表建立索引(注意在插入数据之前建立或者在插入后建立但是要runstats)
说明插入之前建立的话在表插入数据的过程中索引也随着更新这样的话需要较大的日志空间因此速度会比较慢可以采用不计日志的方式插入数据差完之后再建立索引的话该表的日志统计信息没有更新因此执行计划会很差用不到索引runstats on tabble asiainfoaaaa and indexes all之后索引统计信息就会更新这样执行计划会考虑到使用索引因此速度快
将比较大的表建在多节点的表空间上同时建好索引
说明现有的db数据仓库每个节点使用个CPUG内存DIM表空间计划是存放维表的表空间因此是单节点的在使用这个表空间的中的表的时候最多只会用到个CPUG内存加上其他的表空间也都要用到这两个CPU和这G内存因此资源比较有限建议较大的表不要放在这个表空间中而是建立好分区键放在多节点的表空间中这样检索这个表的时候个节点同时检索最后汇总到节点上进行展现速度当然会非常的快另外虽然节点并行性好但是如果建立好索引的话速度会更快
将插入的表使用不计日志的方式插入
说明数据库为了保证数据的一致性和可回退性插入更新或者删除数据的时候要计日志这样在失败的时候可以回退但是如果并发较多或者操作非常大的话会导致争抢日志的情况导致操作非常缓慢如果使用不计日志的方式进行插入更新或者删除操作的话日志使用极少但是如果操作失败的话是无法回退的这样一致性得不到保证这个表只能删除重建!
将表建立表级锁减少锁数量的使用
说明数据库的锁的最大数量是有限制的并且每个锁都要占一定的内存因此如果锁的数量非常多使用的内存也就多导致资源紧张
建立临时表的时候尽量只插入用的到的数据不插用不到的数据
说明程序中好多地方为了提高速度将用到的数据先插入到一个临时表中但是插入了非常多的没有使用的数据这样导致临时表也非常大所以尽可能的只向临时表中插入用的到的数据并且尽可能的使用索引可以大大的提高速度
关于左关联的一点使用心得
在on的条件里面尽量的只写关联条件和对左关联的表作限制而对主表的限制不要写在这里如果写在里面的话不但速度非常慢而且可能会出现莫名其妙的结果