[英]Oracle 10g - Using max on date column that is both partition and index
我有一個表,該表既被DATE
列d_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.