ANALYZE¶
说明¶
收集表的统计信息(总行数),表的分析结果保存在sys_class中的reltuples中,非复合分区表一级子分区的分析结果保存在sys_tabpart的reltuples中,复合分区表一级子分区的分析结果保存在sys_tabcompart的reltuples中,二级子分区的分析结果保存在sys_tabsubpart的reltuples中
参数¶
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;