首批通过分布式安全可靠测评,为关键业务系统打造
ANALYZE
更新时间:2026-07-16 19:52:04
描述
该语句用于收集表或表分区的统计信息。
语法
ANALYZE
TABLE [ schema. ]table_name
[ PARTITION (partition) | SUBPARTITION (subpartition) ]
{ COMPUTE STATISTICS [ for_clause ]
| ESTIMATE STATISTICS [ for_clause ]
[ SAMPLE integer { ROWS | PERCENTAGE } ]
}
for_clause:
FOR TABLE
| ALL COLUMNS
| COLUMNS column [, column]...
参数解释
| 参数 | 描述 |
|---|---|
| schema | 指定表所属的 Schema。如果省略该参数,默认为当前 Schema。 |
| table_name | 指定要分析的表。 |
| PARTITION | SUBPARTITION | 指定要收集统计信息的分区或子分区。如果指定的分区为一级分区,会同时分析该分区下所有子分区的信息。 |
| compute_statistics_clause | 指定 COMPUTE STATISTICS 可以计算分析对象的精确统计信息,并将其存储在数据字典中。分析表时,会同时统计表和列的统计信息。 |
| for_clause | 指定要分析整个表,或者只分析特定的列。
|
| estimate_statistics_clause | 指定 ESTIMATE STATISTICS 可以估计分析对象的统计信息,并将其存储在数据字典中。 |
| SAMPLE | 指定用于估计统计信息使用的分析对象中的采样数据量。如果省略该参数,则对 1064 行进行采样。
|
示例
创建员工信息表并收集统计信息。
-- 创建部门表 CREATE TABLE departments ( dept_id NUMBER(4) PRIMARY KEY, dept_name VARCHAR2(30) NOT NULL, location VARCHAR2(50) ); -- 创建员工表 CREATE TABLE employees ( emp_id NUMBER(6), emp_name VARCHAR2(50) NOT NULL, job_title VARCHAR2(50), manager_id NUMBER(6), hire_date DATE, salary NUMBER(8,2), dept_id NUMBER(4) NOT NULL, email VARCHAR2(100), CONSTRAINT pk_employees PRIMARY KEY (emp_id, dept_id), CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id) ) PARTITION BY RANGE (dept_id) ( PARTITION p_dept_10 VALUES LESS THAN (20), PARTITION p_dept_20 VALUES LESS THAN (30), PARTITION p_dept_other VALUES LESS THAN (MAXVALUE) ); -- 创建索引 CREATE INDEX idx_emp_dept ON employees(dept_id); CREATE INDEX idx_emp_name ON employees(emp_name); -- 收集员工表的完整统计信息 ANALYZE TABLE employees COMPUTE STATISTICS; -- 收集部门表的完整统计信息 ANALYZE TABLE departments COMPUTE STATISTICS;收集特定分区的统计信息。
-- 只收集部门ID小于20的分区统计信息 ANALYZE TABLE employees PARTITION(p_dept_10) COMPUTE STATISTICS;收集特定列的统计信息。
-- 只收集薪资和入职日期的统计信息 ANALYZE TABLE employees COMPUTE STATISTICS FOR COLUMNS salary, hire_date;使用采样方式收集统计信息。
-- 采样1000行数据收集统计信息 ANALYZE TABLE employees ESTIMATE STATISTICS SAMPLE 1000 ROWS; -- 采样5%的数据收集统计信息 ANALYZE TABLE employees ESTIMATE STATISTICS SAMPLE 5 PERCENTAGE;收集所有索引列的统计信息。
-- 收集所有索引列的统计信息,设置直方图桶数为150 ANALYZE TABLE employees COMPUTE STATISTICS FOR ALL INDEXED COLUMNS SIZE 150;收集所有列的统计信息。
-- 收集所有列的统计信息 ANALYZE TABLE employees COMPUTE STATISTICS FOR ALL COLUMNS SIZE 100;收集特定列的直方图统计信息。
-- 为薪资列收集更详细的直方图统计 ANALYZE TABLE employees COMPUTE STATISTICS FOR COLUMNS SIZE 254 salary;