繁体   English   中英

Oracle 10g-使用既是分区又是索引的最大日期列

[英]Oracle 10g - Using max on date column that is both partition and index

我有一个表,该表既被DATEd_dly_label分区又被索引。

我试图了解它对max(d_dly_label) 为什么对以下两个查询产生不同的值:

查询1:

select 
  max(d_dly_label) 
from 
  ECP.TSPT105
where 
  d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
--result: 13/JUL/14

查询2:

select 
  max(d_dly_label) 
from 
  ECP.TSPT105
where 
  d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy')
  and d_dly_label >= to_date('12/06/2015', 'dd/mm/yyyy') - 1;
--result: 11/JUN/15

向where子句添加更多条件如何导致更高的 max(d_dly_label)


更新:我已经从SQL Developer中获取了DDL,并将其简化为一个复制该问题的简短示例。

drop table tmp_105_copy;

CREATE TABLE tmp_105_copy
(
  D_DLY_LABEL DATE NOT NULL 
)
PARTITION BY LIST (D_DLY_LABEL) 
(
  PARTITION JUL2014_13 VALUES (TO_DATE(' 2014-07-13 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
  , PARTITION JUN2015_11 VALUES (TO_DATE(' 2015-06-11 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
);

CREATE INDEX tmp_I1_TSPT105 ON tmp_105_copy(D_DLY_LABEL ASC) 
LOCAL 
(
  PARTITION JUL2014_13 
, PARTITION JUN2015_11 
);

insert into tmp_105_copy values (to_date('13jul2014','ddmonyyyy'));
insert into tmp_105_copy values (to_date('11jun2015','ddmonyyyy'));

commit;

select 
  max(d_dly_label) 
from 
  tmp_105_copy
where 
  d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
-- 13/JUL/14

analyze table tmp_105_copy estimate statistics;  

select 
  max(d_dly_label) 
from 
  tmp_105_copy
where 
  d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
-- still 13/JUL/14

select 
  max(d_dly_label) 
from 
  tmp_105_copy
where 
  d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy')
  and d_dly_label >= to_date('12/06/2015', 'dd/mm/yyyy') - 1;
--11/JUN/15

select 
  max(to_date(d_dly_label))
from 
  tmp_105_copy
where 
  d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
-- also 11/JUN/15

也许这是表中的索引字段? 如果统计数据错误,则可能会出现这种不正确的结果。 您可以尝试更新表的统计信息,然后再次检查查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM