修改表/索引的统计信息 数据库在重新分析后,统计信息可能会影响到现有的执行计划, 影响到代码的执行效率。 还有一个情况是, 我们需要oracle 在解析sql的执行计划的时候,能够按照我们的意愿走某个索引。 影响oracle 执行计划的数据主要来自于表和索引的统计信息, 我们可以手工修改这些统计值 , 下面的脚本是一个修改索引统计信息的脚本, DECLARE M_NUMROWS NUMBER; ---纪录的行数 M_NUMLBLKS NUMBER; --- 数据块的数目 M_NUMDIST NUMBER; --number of distinct key 唯一键的数目, M_AVGLBLK NUMBER; --leaf 平均块数, 一个dist-key 的数据占据几个索引的叶子数据块。 M_AVGDBLK NUMBER; --data 平均块数, 一个dist-key 对应的数据表的块数。 M_CLSTFCT NUMBER; --这个这个值,不太好理解,先放下 M_INDLEVEL NUMBER; --索引的level 数。 BEGIN DBMS_STATS.GET_INDEX_STATS(OWNNAME => NULL,INDNAME => '&source_index_name', NUMROWS => M_NUMROWS,NUMLBLKS => M_NUMLBLKS, NUMDIST => M_NUMDIST,AVGLBLK => M_AVGLBLK, AVGDBLK => M_AVGDBLK,CLSTFCT => M_CLSTFCT, INDLEVEL => M_INDLEVEL); M_CLSTFCT := M_CLSTFCT-3000; DBMS_STATS.SET_INDEX_STATS(OWNNAME => NULL,INDNAME => '&target_index_name', NUMROWS => M_NUMROWS,NUMLBLKS => M_NUMLBLKS, NUMDIST => M_NUMDIST,AVGLBLK => M_AVGLBLK, AVGDBLK => M_AVGDBLK,CLSTFCT => M_CLSTFCT, INDLEVEL => M_INDLEVEL); END; / 对于唯一索引 numdist == numrows key 的数目跟行数是一致的, avglblk = numlblks / numdist 默认的计算方式。 avgdblk = clstfct /numdist 默认的计算方式。 ownername => null ,表示分析当前schema . clstfct 代表的意思,不很好表达,这个值比较重要,会影响到执行计划的cost值, 大体的意思就是,举个例子: select name from tab where id =1 ; id =1 的 数据假设分配在两个数据块里(blk1 ,blk2) , 如果 clsfct 的值很大,(这个值的计算我们以后再说) 数据的实际计算路径应该类似于: 先从blk1 取一笔数据,然后去 blk2里再取一笔数据,然后两个数据merge 然后再从blk1 取一笔数据,然后再从blk2取一笔数据,就这样来回的在两个数据块间切换, 如果 blk1 跟blk2 是连在一起的,那么会在一个disk i/0 中读入内存,然后产生了大量的consistent get 如果不好采, 这个数据库块间间隔了几十个数据块,那么就会产生比较频繁的物理i/0切换, 这个值大体的就是这个意思了。 这个对应于all_indexes 视图的CLUSTERING_FACTOR 字段的解释: ( Indicates the amount of order of the rows in the table based on the values of the index. * If the value is near the number of blocks, then the table is very well ordered. In this case, the index entries in a single leaf block tend to point to rows in the same data blocks. * If the value is near the number of rows, then the table is very randomly ordered. In this case, it is unlikely that index entries in the same leaf block point to rows in the same data blocks. ) 这个值比较理想的状态下应该跟 numblk 的数量查不多。 等对这个东西看的差不多了,再写个文档,先这样看着吧。
修改oracle 的统计信息
来源:这里教程网
时间:2026-03-03 18:06:46
作者:
编辑推荐:
- 修改oracle 的统计信息03-03
- 行连接的处理方式指引03-03
- 零门槛入门学习在线搭建网站的教学!03-03
- Oracle数据库坏块典型案例分析03-03
- 手持式万兆以太网测试仪03-03
- 以太网网络分析仪03-03
- inmemory OOM了03-03
- 三路人马“交战”无人配送03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 零门槛入门学习在线搭建网站的教学!
零门槛入门学习在线搭建网站的教学!
26-03-03 - Oracle数据库坏块典型案例分析
Oracle数据库坏块典型案例分析
26-03-03 - 手持式万兆以太网测试仪
手持式万兆以太网测试仪
26-03-03 - 以太网网络分析仪
以太网网络分析仪
26-03-03 - inmemory OOM了
inmemory OOM了
26-03-03 - 三路人马“交战”无人配送
三路人马“交战”无人配送
26-03-03 - oracle 19c 跨小版本 单实例通过ADG迁移到rac
oracle 19c 跨小版本 单实例通过ADG迁移到rac
26-03-03 - 5款办公用得到的软件
5款办公用得到的软件
26-03-03 - Oracle、MySQL等数据库故障处理优质文章分享 | 10月文章汇总
Oracle、MySQL等数据库故障处理优质文章分享 | 10月文章汇总
26-03-03 - windows如何处理大量time_wait
windows如何处理大量time_wait
26-03-03
