(1)runstats------------------------------------------------------------------------------------------ runstats(run statistics)用于手工更新统计信息, 以使当前的目录表空间中统计信息和实际数据的信息相一致,最终目的是有利于数据库优化器根据统计信息选择最优执行方案。 1.在runstats执行完之后,静态SQL查询并不会使用最新的统计信息,需要手工重新执行"BIND"以绑定。动态的SQL不需要,因为动态sql是在执行sql的时候加载统计信息的。 2.runstats用法: RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM on all columns; = RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM; RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM on columns(depNo, depName); --对指定的列收集统计信息 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM on key columns; --对表的所有索引字段进行收集统计信息,key columns指索引字段,若无索引则不收集任何统计信息;视图不适用该用法。 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM on key columns and columns(depNo, depName); RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM and indexes all; --收集表和索引上的统计信息,不包含分布统计信息。 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM and detailed indexes all; --收集表上的统计信息和索引上的详细统计信息,不包含分布统计信息。 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM for indexes all; 只收集所有索引统计信息(不收集表统计信息) RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM for indexes ind1, ind2, ind3; 只收集指定索引的统计信息
DETAILED 详细统计信息,适用于相对较大的索引,不适用与视图 SAMPLED 必须和DETAILED联用,可减少CPU和内存的消耗,提高运行效率。 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM AND SAMPLED DETAILED INDEXES ALL; --(以快速方式)收集表和该表的所有索引的详细统计信息
3.如果是对所有的表进行统计信息更新:reorgchk: db2 -v SELECT tbname,nleaf,nlevels,STATS_TIME FROM sysibm.sysindexes; db2 -v reorgchk update statistics on table all; db2 -v SELECT tbname,nleaf,nlevels,STATS_TIME FROM sysibm.sysindexes; 4.判断是否执行过runstats: SELECT tbname,nleaf,nlevels,STATS_TIME FROM sysibm.sysindexes; 若未执行过runstats,则nleaf,nlevels为 -1,且STATS_TIME为"-",若执行过了,则都有值。 5.加上 allow read access表示在runstats时其他用户可以读该表; 加上 allow write access(默认)表示其他用户可以读取或写入。 -------------------************ 6.若要统计频率(frequency) 和 分位数(quantile) 统计信息应加上with distribution; frequency如:car表中type为A的100个,为'B'的200个... ; quantile 如:汽车制造流程1--200步,处于step10的100个, step 20的300个.... 频率(frequency)统计信息的默认值由数据库配置参数num_freqvalues决定,默认值为10,建议取10--100;若设置为0,则不保留任何频率的统计信息。 分位数(quantile) 统计信息由数据库配置参数num_quantiles决定,默认值为20,建议取20--50,若设为1 则不统计任何分位数统计信息。 使用方法: RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM with distribution and indexes all; --使用数据库配置参数num_freqvalues和num_quantiles的配置值 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM with distribution DEFAULT NUM_FREQVALUES 20 NUM_QUANTILES 30; --为NUM_FREQVALUES和NUM_QUANTILES指定值。 RUNSTATS ON TABLE IOV.OPP_HIS_FACT_HM with distribution on columns(colA NUM_QUANTILES, colB NUM_FREQVALUES 20 NUM_QUANTILES 30) DEFAULT NUM_FREQVALUES 0 NUM_QUANTILES 0 AND INDEXES ALL; -- 对于colB列NUM_FREQVALUES是 20, NUM_QUANTILES 是 30; 对于colA列则是用为该表指定的参数值,即后面的DEFAULT NUM_FREQVALUES 0 NUM_QUANTILES 0; 对于其他列也是DEFAULT NUM_FREQVALUES 0 NUM_QUANTILES 0,不包含任何统计信息。
添加新评论0 条评论