sql調優1

oracle_mao發表於2013-12-30

sql語句為:
select count(*) over() TOTALROWCOUNT,
       count(*) as ROW_NUMBER,
       row_number() over(order by t1.Y_CODE) ROW_NUMBER2,
       count(distinct t1.r_id) NUMBER3,
       t1.Y_CODE,
       t1.Y_NAME
  from T1
 where (t1.G_TYPE = 'LEVEL_ONE')
   and (t1.D_STATUS = 'ACTIVE')
   and t1.PUBLICATION_DATE >= TO_DATE('01/23/2013', 'MM/dd/yyyy')
   and t1.PUBLICATION_DATE <= TO_DATE('12/31/2013', 'MM/dd/yyyy')
 group by t1.Y_CODE, t1.Y_NAME
 ORDER BY t1.Y_CODE
執行計劃為:
 
sql調優1
執行時間為75s。

調整如下:
create index ind_t1PUBLICATION_DATE  on t1(PUBLICATION_DATE );---建立索引
再次執行,檢視執行計劃依然為全表掃描。
原因:
由於這裡的時間範圍太長了,所以oracle認為全表掃描要更快一些,修改sql的內容:
select count(*) over() TOTALROWCOUNT,
       count(*) as ROW_NUMBER,
       row_number() over(order by t1.Y_CODE) ROW_NUMBER2,
       count(distinct t1.r_id) NUMBER3,
       t1.Y_CODE,
       t1.Y_NAME
  from T1
 where (t1.G_TYPE = 'LEVEL_ONE')
   and (t1.D_STATUS = 'ACTIVE')
   and t1.PUBLICATION_DATE >= TO_DATE('10/23/2013', 'MM/dd/yyyy')
   and t1.PUBLICATION_DATE <= TO_DATE('12/31/2013', 'MM/dd/yyyy')
 group by t1.Y_CODE, t1.Y_NAME
 ORDER BY t1.Y_CODE
 
sql調優1
執行時間為10s。由於這個表有1500w行記錄,所以我覺得10s還可以了。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24500180/viewspace-1065586/,如需轉載,請註明出處,否則將追究法律責任。

相關文章