今年我的一个项目是用的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的资料就要少很多了。好了,就写这么多吧。