Oracle to_date () разница в плане и времени выполнения - PullRequest
0 голосов
/ 24 февраля 2012

у меня два запроса

select *
 from T
 where DATE_OF between to_date ('01.02.2012 00:00:00', 'DD.MM.YYYY hh24:mi:ss')
                   and to_date ('01.02.2012 23:59:59','DD.MM.YYYY hh24:mi:ss')

объяснить план

SELECT STATEMENT  ALL_ROWSCost: 146,313  Bytes: 55,799,142  Cardinality: 150,402        
2 MAT_VIEW ACCESS BY INDEX ROWID MAT_VIEW T Cost: 146,313  Bytes: 55,799,142  Cardinality: 150,402      
    1 INDEX RANGE SCAN INDEX IND$T_05 Cost: 464  Cardinality: 150,402  

Второй запрос

select *
from T
where DATE_OF >= to_date('201202','yyyyMM') 
  and DATE_OF <  to_date('201203','yyyyMM')

объяснить план

SELECT STATEMENT  ALL_ROWSCost: 4,242,836  Bytes: 1,618,120,952  Cardinality: 4,361,512         
2 MAT_VIEW ACCESS BY INDEX ROWID MAT_VIEW T Cost: 4,242,836  Bytes: 1,618,120,952  Cardinality: 4,361,512   
    1 INDEX RANGE SCAN INDEX IND$T_05 Cost: 13,368  Cardinality: 4,361,512  

индекс ddl

CREATE INDEX IND$T_05 ON T(DATE_OF, TP)

DATE_OF - столбец с типом даты. MVIEW не разделен.

Почему такая большая разница в стоимости запросов?

1 Ответ

3 голосов
/ 24 февраля 2012

Это связано с тем, что первый запрос сканируется в течение одного дня (1 Feb 2012), а второй - в течение одного месяца (Feb 2012).

Вам нужен один день или один месяц?

...