簡體   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