更改添加列时如何将直方图约束添加到是

时间:2018-07-25 22:08:13

标签: oracle

我正在使用Oracle数据库,必须更改表' RETURNS '并添加列 RENTAL_SALES INBOUND_SALES

ALTER TABLE
   RETURNS
ADD(
   RENTAL_SALES NUMBER (14,2) NULL,
   INBOUND_SALES NUMBER (14,2) NULL
);

如何将 直方图 设置为“

2 个答案:

答案 0 :(得分:1)

使用method_opt ='FOR ALL COLUMNS SIZE 1 FOR FOR COLUMNS SIZE 254 {要在其上启用直方图的列名}''运行收集状态。 检查是否启用 选择column_name,直方图 User_tab_column_statics其中table_name ='tableName';

答案 1 :(得分:1)

为什么需要使用直方图?您是否遇到错误的查询平面?

直方图的类型取决于类型分配的不同值的数量。

频率(顶部)直方图,高平衡直方图和混合直方图。

数据库将通过自动收集统计信息来分配直方图,然后查询表(查询表数据时将在SYS.COL_USAGE $上更新),然后再次更新统计信息。

BEGIN 
dbms_stats.Gather_table_stats('SCHEMA_NAME', 'TABLE',
method_opt => 'FOR ALL COLUMNS SIZE AUTO'); 
END; 
/

select * from TABLE where ....

BEGIN 
dbms_stats.Gather_table_stats('SCHEMA_NAME', 'TABLE',
method_opt => 'FOR ALL COLUMNS SIZE AUTO'); 
END; 
/

注意:(如果您已经在统计信息之前创建了索引,或者已经在表中进行查询,那么再次更新统计信息将创建直方图)

另一个注意事项:method_opt='FOR ALL COLUMNS SIZE 1 FOR COLUMNS SIZE 254 column name会将列分配给高平衡列,也许此列需要频率类型,所以如果您不知道NDV以及那里有多少数据,最好让数据库选择,否则可能有错误的查询计划,并且其余列将不会创建直方图,因为所有大小为1的列均会收集基本列统计信息。