Welcome 微信登录

首页 / 数据库 / MySQL / Oracle中收集表与列统计信息

我们在分析某些语句的性能时,会分析一些信息。像表、列、索引、直方图等等,本篇主要讲表与列的统计信息收集与分析。

一、表统计信息

首先创建一个测试表,更新一些数据,加入一些约束:CREATE TABLE t
AS
SELECT rownum AS id,
      round(dbms_random.normal*1000) AS val1,
      100 + round(ln(rownum/3.25+2)) AS val2,
      100 + round(ln(rownum/3.25+2)) AS val3,
      dbms_random.string("p",250) AS pad
FROM All_Objects
WHERE ROWNUM<=1000
ORDER BY dbms_random.value;UPDATE T SET VAL1 = NULL WHERE VAL1 < 0;ALTER TABLE t ADD CONSTRAINT t_pk PRIMARY KEY(ID);CREATE INDEX t_val1_i ON t(val1);
CREATE INDEX t_val2_i ON t(val2);BEGIN
DBMS_STATS.GATHER_TABLE_STATS(OWNNAME          => USER,
                                TABNAME          => "T",
                                ESTIMATE_PERCENT => 100,
                                METHOD_OPT      => "for all columns size skewonly",
                                CASCADE          => TRUE);
END;此时表已经搜集了统计信息,查看表的统计信息用user_tab_statistics。SELECT NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_ROW_LEN
  FROM USER_TAB_STATISTICS
 WHERE TABLE_NAME = "T";
NUM_ROWSBLOCKSEMPTY_BLOCKSAVG_SPACECHAIN_CNTAVG_ROW_LEN
100044000265
 关于每一列的解释联机文档上都有,这里blocks是高水位以下的数据块数,empty_blocks是高水位以上的数据块数。Dbms_stats不计算EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT。
  • 1
  • 2
  • 下一页
Oracle终止session在VS环境下以ADO方式操作Oracle数据库相关资讯      Oracle统计信息  Oracle收集统计信息 
  • 让 Oracle的自动统计信息不收集直  (昨 06:47)
  • Oracle 11g系统自动收集统计信息的  (11/21/2014 13:56:16)
  • Oracle 收集统计信息在11g和12C下  (10/20/2014 18:38:42)
  • Oracle 锁定临时表统计信息及锁住  (11/21/2014 13:58:20)
  • Oracle自动统计信息的收集原理及实  (11/21/2014 13:54:02)
  • Oracle收集索引统计信息  (12/12/2013 09:29:36)
本文评论 查看全部评论 (0)
表情: 姓名: 字数