2017-10-09 44 views
0

我有這個疑問:的Oracle SQL優化

SELECT sd.sdt_service_type, 
     sd.sdt_status, 
     count(*) col_count 
FROM mci_service_data sd 
WHERE 
    sd.sdt_version = 1 
    AND sd.sdt_type = 'MMSP' 
    AND sd.sdt_status in (?) 
    AND(sd.STD_OPERATION_FLAG is null OR sd.STD_OPERATION_FLAG not like 'mark%') 
    AND sd.sdt_office_id in 
    (SELECT op.fld_ofs_id 
     FROM mci_ofs_per op 
     WHERE op.fld_per_id = ?) 
group by sd.sdt_service_type,sd.sdt_status 

在mci_service_data表上有 mci_service_data(sdt_type, sdt_version, sdt_status, sdt_office_id) mci_ofs_per(fld_per_id, fld_ofs_id)。但此查詢索引需要時間超過10秒!

那麼,這個查詢將如何優化和更快?

+1

爲什麼''sd.sdt_status而不是'sd.sdt_status ='? ? (如果你提供一個逗號分隔的字符串給綁定變量,那麼這將不起作用,因爲它仍然會被視爲單個字符串而不是多個值。) – MT0

+0

請** [編輯] **你的問題,並添加'創建表問題(包括所有索引)的表格語句以及查詢的執行計劃。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not上傳問題時的代碼問題/ 285557#285557) –

+0

有多少數據我有2個表?你能告訴我們查詢計劃嗎?以及(?)是什麼意思?數據變化很大? – Moudiz

回答

0

對於此查詢,我會推薦以下指標:(?)

  • mci_service_data(sdt_type, sdt_version, sdt_status, sdt_office_id)
  • mci_ofs_per(fld_per_id, fld_ofs_id)
+0

謝謝@GordonLinoff,但表中有這些索引。 –

+1

@ Saeed.Satari。 。 。這是*兩個*索引,一個是四列,一個是兩列。這些不是你在問題中描述的索引。 –

+0

是的,我知道@GordonLinoff,我編輯過的描述 –