Oracle统计信息的魔力
在Oracle数据库中,可以使用DBMS\_STATS包来收集、管理和查看统计信息,以提高查询优化器生成高效执行计划的能力。以下是一个简单的例子,展示如何使用DBMS\_STATS包来收集、刷新和查看统计信息。
-- 首先,确保DBMS_STATS包已经被启用
BEGIN
DBMS_STATS.SET_GLOBAL_PREFS(
'ownname' => 'SCOTT',
'optname' => 'AUTO',
'optvalue' => 'CHAINED'
);
END;
/
-- 收集SCOTT用户所有对象的统计信息
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS(
'SCOTT',
CASCADE => TRUE,
METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO',
DEGREE => DBMS_STATS.AUTO_DEGREE,
GRANULARITY => 'ALL'
);
END;
/
-- 刷新统计信息,以确保查询优化器使用最新的统计数据
BEGIN
DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
END;
/
-- 查看特定表的统计信息
SELECT table_name, num_rows, blocks, avg_row_len
FROM user_tables
WHERE table_name = 'EMP';
-- 查看特定列的统计信息
SELECT column_name, num_distinct, low_value, high_value, density
FROM user_tab_columns
WHERE table_name = 'EMP' AND column_name = 'SAL';
这个例子展示了如何收集、刷新和查看统计信息。在实际操作中,应该根据具体需求调整参数设置。例如,可以设置CASCADE => FALSE
来避免收集索引统计信息,或者通过METHOD_OPT
参数调整采样大小。
评论已关闭