0

2つのクエリがあります

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  

2 番目のクエリ

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 は分割されていません。

クエリのコストに大きな違いがあるのはなぜですか?

4

1 に答える 1

3

これは、最初のクエリが 1 日 ( 1 Feb 2012) をスキャンし、2 番目のクエリが 1 か月 ( Feb 2012) をスキャンするためです。

1日ですか、それとも1か月ですか?

于 2012-02-24T08:01:38.367 に答える