Oracle高价值统计

时间:2018-08-27 15:39:01

标签: sql oracle query-optimization

考虑这种表格:

create table t (
   id number,       -- and many many other columns of course
   record_date date -- the date when the rows is inserted
);

在此表中,我们每小时增加40万行。每小时,我们使用最后一小时的数据启动查询。一个SQL,例如:

SELECT 
    ... 
FROM t
INNER JOIN ... -- t is joined with many other tables
INNER JOIN ... 
INNER JOIN ... 
INNER JOIN ... 
WHERE 
   t.record_date >= :my_current_date - 1/24
;

我们遇到的问题是,这种情况经常使计划不好。这是原因:

Oracle计算表的统计信息时,会将max(record_date)存储在名为 high_value 的统计信息中。因此,在启动SQL时,Oracle比较过滤器t.record_date >= :my_current_date - 1/24并使用列record_date的high_value,并认为几乎不会返回任何行(而不是返回400k)。 。因此,以下联接的优化效果不好...

在这种情况下最好的解决方案是什么?我可以使用一个提示例如...

1 个答案:

答案 0 :(得分:0)

我使用了提示OPT_ESTIMATE(TABLE t MIN = 400000),到目前为止,它仍然有效。谢谢piezol!