ANALYZE

说明

收集表的统计信息(总行数),表的分析结果保存在sys_class中的reltuples中,非复合分区表一级子分区的分析结果保存在sys_tabpart的reltuples中,复合分区表一级子分区的分析结果保存在sys_tabcompart的reltuples中,二级子分区的分析结果保存在sys_tabsubpart的reltuples中

语法

analyze ::=

参数

VERBOSE

是否显示执行过程的信息(仅语法支持,该参数会被忽略)。

table_name

要分析的表的名字。

PARTITION

分析非复合分区表的一级子分区或复合分区表的一级子分区。

SUBPARTITION

分析复合分区表的二级子分区。

part_or_subpart_name

分区的名字。

column_name

要分析的列名(仅语法支持,该参数被忽略了)。

FAST

分析时使用快速抽样。

示例

示例1: 分析普通表

--  清理环境
DROP TABLE tab1 CASCADE;

--  创建表并插入数据
CREATE TABLE tab1 (a INT, b INT);

INSERT INTO tab1 VALUES(1, 1);
INSERT INTO tab1 VALUES(2, 2);



SELECT RELNAME, RELTUPLES FROM SYS_CLASS WHERE RELNAME = 'TAB1';
RELNAME(name)      |RELTUPLES(real)      |
----------------------------------------
TAB1               |8192                 |
总数目:1

--  分析普通表
ANALYZE TAB1;


SELECT RELNAME, RELTUPLES FROM SYS_CLASS WHERE RELNAME = 'TAB1';
RELNAME(name)      |RELTUPLES(real)      |
----------------------------------------
TAB1               |2                    |
总数目:1


--  删除表
DROP TABLE tab1;

示例2: 分析分区表的分区

--  清理环境
DROP TABLE tab2 CASCADE;

--  创建表并插入数据
CREATE TABLE tab2 (a INT) PARTITION BY RANGE(a)
(
    PARTITION p1 VALUES LESS THAN(100),
    PARTITION p2 VALUES LESS THAN(1000)
);

INSERT INTO tab2 VALUES(1);
INSERT INTO tab2 VALUES(2);
INSERT INTO tab2 VALUES(300);
INSERT INTO tab2 VALUES(400);



SELECT B.RELNAME, A.PARTNAME, A.RELTUPLES FROM SYS_TABPART A, SYS_CLASS B
    WHERE A.BO = B.OID AND A.PARTNAME = 'P1' AND B.RELNAME = 'TAB2';
RELNAME(name)      |PARTNAME(name)      |RELTUPLES(real)      |
------------------------------------------------------------
TAB2               |P1                  |8192                 |
总数目:1

--  分析分区表的分区
ANALYZE tab2 PARTITION (p1);


SELECT B.RELNAME, A.PARTNAME, A.RELTUPLES FROM SYS_TABPART A, SYS_CLASS B
    WHERE A.BO = B.OID AND A.PARTNAME = 'P1' AND B.RELNAME = 'TAB2';
RELNAME(name)      |PARTNAME(name)      |RELTUPLES(real)      |
------------------------------------------------------------
TAB2               |P1                  |2                    |
总数目:1


--  删除表
DROP TABLE tab2;