`

如何收集及删除列的统计信息

阅读更多

本文只涉及使用dbm_stats来收集或删除列的统计信息的一些命令,以备查询。

测试表如下(实验环境为10.2.0.4):

SQL> create table test(i int,a varchar2(30));
Table created.

SQL> insert into test select rownum,object_name from all_objects;
9907 rows created.

简单的说,列的统计信息,主要包括两种类型:

  • 只有基本信息:收集的统计信息只有1个桶(bucket)
  • 包含柱状图信息:收集的统计信息包含2到254个桶

也就是说,如果想收集列的基本信息,同时不希望收集柱状图,则需要指定bucket的size为1:

SQL> exec dbms_stats.gather_table_stats(user, 'TEST',
cascade=>false, method_opt=>'for columns i size 1');

PL/SQL procedure successfully completed.                                                                             

SQL> select column_name,num_distinct,num_buckets,low_value,high_value,density,
avg_col_len,histogram
  2  from user_tab_columns where table_name='TEST';

COLUMN_NAM DISTINCT BUCKETS LOW_VALUE  HIGH_VALUE    DENSITY AVG_COL_LEN HISTOGRAM
---------- -------- ------- ---------- ---------- ---------- ----------- ----------
I              9907       1 C102       C26408     .000100939           4 NONE
A                                                                        NONE

如果要收集列的柱状图信息,则bucket的个数必须大于等于2(最多不超过254)

SQL> exec dbms_stats.gather_table_stats(user, 'TEST',
cascade=>false, method_opt=>'for columns i size 2');

PL/SQL procedure successfully completed.

SQL> select column_name,num_distinct,num_buckets,low_value,high_value,density,
avg_col_len,histogram
  2  from user_tab_columns where table_name='TEST';

COLUMN DISTINCT BUCKETS LOW_VALUE HIGH_VALUE    DENSITY AVG_COL_LEN HISTOGRAM
------ -------- ------- --------- ---------- ---------- ----------- ---------------
I          9907       2 C102      C26408     .000100939           4 HEIGHT BALANCED
A                                                                   NONE

如果要删除列已有的柱状图信息而保留列的基本统计信息,则需要重新收集bucket为1的统计信息

SQL> exec dbms_stats.gather_table_stats(user, 'TEST',
cascade=>false, method_opt=>'for columns i size 1');

PL/SQL procedure successfully completed.

SQL> select column_name,num_distinct,num_buckets,low_value,high_value,density,
avg_col_len,histogram
  2  from user_tab_columns where table_name='TEST';

COLUMN DISTINCT BUCKETS LOW_VALUE  HIGH_VALUE    DENSITY AVG_COL_LEN HISTOGRAM
------ -------- ------- ---------- ---------- ---------- ----------- ----------
I          9907       1 C102       C26408     .000100939           4 NONE
A                                                                    NONE

这个操作明显不太合理,重新收集统计信息的代价有时候是很大的,所以Oracle11g对此做出了改进,允许只删除柱状图而保留基本统计信息,命令语法如下:

exec dbms_stats.delete_column_stats(user, 'TEST','I',col_stat_type=>'HISTOGRAM');

而要彻底删除整个列的统计信息,则需要调用delete_column_stats过程

SQL> exec dbms_stats.delete_column_stats(user, 'TEST', 'I');

PL/SQL procedure successfully completed.

SQL> select column_name,num_distinct,num_buckets,low_value,high_value,density,
avg_col_len,histogram
  2  from user_tab_columns where table_name='TEST';

COLUMN DISTINCT BUCKETS LOW_VALUE  HIGH_VALUE DENSITY  AVG_COL_LEN HISTOGRAM
------ -------- ------- ---------- ---------- -------  ----------- ----------
I                                                                  NONE
A                                                                  NONE

可以在同一个过程中收集多个列的统计信息,并且可以为不同的列指定不同的bucket个数:

SQL> exec dbms_stats.gather_table_stats(user, 'TEST',
cascade=>false, method_opt => 'for columns size 1 T for columns size 2 A');

PL/SQL procedure successfully completed.

SQL> select column_name,num_distinct,num_buckets,low_value,high_value,density,
avg_col_len,histogram
  2  from user_tab_columns where table_name='TEST';

COLUMN DISTINCT BUCKETS LOW_VALUE HIGH_VALUE              DENSITY AVG_COL_LEN HISTOGRAM
------ -------- ------- --------- -------------------- ---------- ----------- ---------------
I          9907       1 C102      C26408               .000100939           4 NONE
A          7376       2 41        5F75746C245F6C6E635F .000185239          18 HEIGHT BALANCED
                                  696E645F7061727473

值得注意的是,9i的dbms_stats中,method_opt的默认值是FOR ALL COLUMNS SIZE 1,也就是收集列的基本统计信息而不收集柱状图信息,而10g的默认值则变成了FOR ALL COLUMNS SIZE AUTO,则Oracle在收集列的基本信息之外,还会根据情况收集某些列的柱状图。

分享到:
评论

相关推荐

    动态添加删除列和高级报表查询统计

    功能强大的flex的高级报表查询统计,带动态添加和删除列

    实现某部门职工信息管理。职工信息包括:职工号、姓名、性别、年龄、学历、基本工资、岗位津贴、住址、电话等(职工号不重复)。

    实现某部门职工信息管理。职工信息包括:职工号、姓名、性别、年龄...6、统计功能:对文件中某关键字的相关记录内容信息进行统计(比如人数.工资等),7、排序:根据给定字段,对记录进行排序,例如:按工资的高低排序

    学生信息管理系统,实现学生信息包括:学号、姓名、性别、年龄、班级等信息。

    学生信息管理系统,实现学生信息包括:学号、姓名、性别、年龄、班级等信息。...(1)添加功能:(2)查询功能:(3)显示功能:(4)编辑功能:(5)删除功能:(6)统计功能:(7)保存功能:(8)读取功能:

    Hbase应用开发实验报告及代码

    (1) 列出HBase所有的表的相关信息,例如表名、创建时间等;(2) 在终端打印出指定的表的所有记录数据;(3) 向已经创建好的表添加和删除指定的列族或列;(4) 清空指定的表的所有记录数据(5) 统计表的行数。2...

    c++教务信息管理系统380

    教务管理系统类:定义了一个 EduSystem 类,包含了添加学生信息、添加学生成绩信息、删除学生信息、修改学生信息、修改学生成绩信息、查询学生信息以及各种统计功能的方法。 主函数:在 main() 函数中实例化了一个 ...

    阿江酷站访问统计系统 V 2.2 正 式 版 041121

    1) 问:我从搜索引擎中搜索不同的关键词进入多次,但只列出一个关键词。 答:后面的几次进入被系统认为是“刷新”或者“站内页面跳转”,系统 并不对关键词等信息进行分析。 2) 问:我的系统不支持FSO,安装步骤的...

    文件检测大师3.1(让统计变的更轻松)

    统计自动删除。结果中有非常详尽的信息,绝对能满足您的欲望;比如:文件统 计则会把所有的符合条件文件有序的列出,包括统计时间,文件总数,大小等。 数据统计则会用间隔符分条列出,每个结果都会列出在源文件中...

    数据分析+数据预处理+Pandas-DataFrame

    主要有对某列字符替换、groupby分组统计、聚合统计、根据某列进行排序、dataframe格式转...列数据末尾添加特殊字符、获取索引和数据、删除重复数据、常用的统计计算、使用countains可以用来正则匹配筛选、某列累计求和...

    文件检测大师3.3(让统计变得更轻松)

    统计自动删除。结果中有非常详尽的信息,绝对能满足您的欲望;比如:文件统 计则会把所有的符合条件文件有序的列出,包括统计时间,文件总数,大小等。 数据统计则会用间隔符分条列出,每个结果都会列出在源文件中...

    excel对象清理工具/vba清理Excel对象

    excel多余对象清理工具/Excel瘦身小工具/Excel表格行列统计 有暴力删除(删除全部对象,不管是否有用)模式 有常规清理(目前仅支持删除AutoShape/图表、Textbox/文本框,共2种对象)模式 --这几种对象正常都不是...

    代码行数统计

    代码行数统计 - Powered By Null HeTaoOS@Gmail.com<br>http://hi.baidu.com/hetaoos<br><br>... 5,设置 可以自定义统计代码中,那些行计入有效代码,这个设置的结果,将显示在表格的“自定义”列中。

    阿江统计2.2商业版

    1) 问:我从搜索引擎中搜索不同的关键词进入多次,但只列出一个关键词。 答:后面的几次进入被系统认为是“刷新”或者“站内页面跳转”,系统 并不对关键词等信息进行分析。 2) 问:我的系统不支持FSO,安装步骤的...

    超市管理系统

    管理员可对商品信息的进行查询、修改、删除、添加操作;商品类别必须是商品类别表中项;商品售出后库存相应减少;商品在销售过程中可能会有多种促销活动,用户可谁是更改。商品的售价可按活动中的活动规则和活动时间...

    学生信息管理系统

    3.在已经读取的信息的基础上,完成添加、删除、修改、查找学生信息的操作。 4.根据获取的信息,统计本科生、硕士生、博士生人数,并显示在cmd窗口中。 5.对本硕博3类学生,分别根据学号升序排序,并按学号、学生姓名...

    依据VB全套建材管理销售系统(毕业设计源代码+系统)

    商品销售信息管理:商品销售信息包括商品销售数量、单价、统计日期等。商品销售管理功能完成销售信息登记、修改和删除等。 分类查看:可以根据商品类型来查看某种商品的销售情况。 更新库存:销售信息的变动直接关系...

    MATLAB代码示例,用于处理大量数据集并使用统计方法进行分析和可视化(附详细操作步骤).txt

    通过这些图形,我们可以直观地了解数据的分布情况、频数分布等信息,并对数据进行初步的统计分析。 3. 统计分析和可视化 除了读取数据文件和绘制图形之外,我们还可以使用各种统计分析方法和可视化工具对数据进行...

    ASP.NET开发典型模块大全(1DVD) 第9章 网站统计分析 

    第9章 网站统计分析 247 9.1 网站统计分析概述 248 9.1.1 功能概述 248 9.1.2 数据库设计 248 9.2 网站统计分析关键技术 250 9.2.1 GDI+绘制图形 250 9.2.2 柱型图的绘制 251 9.2.3 饼型图的绘制 ...

    WinDirStat 硬盘容量统计软件

    不过要注意的是,如果你想要删除文件时,虽然可以透过 WinDirStat工具列上的那个叉叉按钮,不过可要真的确定你不需要这些文件才这么做喔。因为藉由这个功能所删除的文件,将会不经过「回收站」而被直接删除喔!

    列车售票系统测试报告.doc

    系统管理员通过该系统能够对整个列车站的列车,车票等信息进行统计,添加,删除,对售票员进行增加或减少,对铁路部门的列车及售票系统进行统一管理。 该软件构建起区域铁路部门列车信息及车票信息,及售票情况,...

Global site tag (gtag.js) - Google Analytics