-------------SQL SERVER与DB2统计信息与索引碎片整理---------------

今年我的一个项目是用的DB2数据库。所以也学习了一把DB2数据库。本人学艺不精,遇到了很多困难。不过就我工作中使用DB2的感受而言,DB2对于统计信息和索引 碎片整理的使用频率比SQL SERVER的要高很多。所以现在我将两种数据库的相关内容都整理在这里,作为参考之用,对于高手来说,仅博一笑而已。


对于SQL SERVER来说,统计指定表信息的查询方法如下:


--查询指定表的统计信息(sys.stats和sysobjects联合查询)
select
  o.name,--表名
  s.name,--统计信息的名称
  auto_created,--统计信息是否由查询处理器自动创建
  user_created--统计信息是否由用户显示创建
from
  sys.stats
inner join
  sysobjects o
on
  s.object_id=o.id
where 
  o.name='表名'
go



更新统计信息可以这样:

update statistics 表名


具体的一些方法就不再多说,联机丛书上都可以查询到。


DB2中可以通过下面的语句来查询:


WITH TMP(ID, NUM) AS
(
   SELECT COLGROUPID, MAX(ORDINAL)
     FROM SYSCAT.COLGROUPCOLS
   GROUP BY COLGROUPID
),
TMP2 (ID, NAME, NUM, TNAME, TSCHEMA) AS
(
   SELECT ID, CAST(RTRIM(COLNAME) AS CHAR(128)), NUM, TABNAME, TABSCHEMA
     FROM TMP Y, SYSCAT.COLGROUPCOLS X
    WHERE X.COLGROUPID = Y.ID
      AND Y.NUM = X.ORDINAL
  UNION ALL
   SELECT Y.ID, CAST(RTRIM(X.COLNAME) || ',' || Y.NAME AS CHAR(128)), Y.NUM-1,
   	 TNAME, TSCHEMA
     FROM TMP2 Y, SYSCAT.COLGROUPCOLS X
    WHERE Y.ID=X.COLGROUPID
      AND X.ORDINAL=Y.NUM-1
      AND Y.NUM > 1
      AND TNAME = TABNAME
      AND TSCHEMA = TABSCHEMA
)
SELECT SUBSTR(TSCHEMA,1,10) TABSCHEMA, SUBSTR(TNAME,1,10) TABNAME, NAME COLS,
	 COLGROUPCARD 
FROM TMP2, SYSSTAT.COLGROUPS
WHERE ID = COLGROUPID
AND NUM = 1
ORDER BY TABSCHEMA, TABNAME
;


SELECT SUBSTR(COLNAMES, 1, 30) AS COLS, FIRST2KEYCARD, FIRST3KEYCARD,
	 FIRST4KEYCARD, FULLKEYCARD
FROM SYSSTAT.INDEXES
WHERE TABSCHEMA='TABSCHEMA' AND TABNAME='TABNAME';


上述代码中的TABSCHEMA是模式名,TABNAME是表名。


这里简单介绍下DB2中统计信息的收集与整理:

DB2 RUNSTATS ON TABLE TABNAME WITH DISTRIBUTION AND IN INDEX ALL

有关于表和索引的很多种用法,就不一一列举了。大家查查资料就很容易找到。



对于索引碎片处理这块,SQL SERVER中分成4种方法:

1.删除索引并重建

2.DROP EXISTING

3.ALTER INDEX REBUILD语句重建

4.ALTER INDEX REORGANIZE语句整理索引碎片


DB2中也应该有以下几种:

1.删除并重建索引

2.DB2 REOGR TABLE TABNAME整理表

3.DB2 REORG TABLE TABNAME INDEX 索引名 RESETDICTONARY (根据索引整理表)

4.整理表的所有索引(DB2 REORG INDEXES ALL FOR TABLE TABNAME)


DB2比较麻烦的一点是这些整理或者重建动作可能导致数据包丢失,还需要重新绑定数据包。这个内容与本文关系不大,在这里就不多说了。


总体来说,就我个人感觉,SQL SERVER中关于索引的操作相对来说要简单一些,在SQL SERVER 2008以后,查询统计信息与索引信息都较为方便。而在DB2中,统计信息的查询方法复杂一些,但方法比SQL SERVER多。索引碎片的处理方面,两者都差不多。不过DB2数据包可能会丢失,还需要重新绑定包的操作,这个比SQL SERVER 麻烦。


关于统计信息和索引碎片整理方面的方法很多,在这里不可能全部一一列举,各位可以自己动手查查资料。SQL SERVER丰富的资料是一大优势,相比之下,IDM的资料就要少很多了。好了,就写这么多吧。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值