2012-08-30 105 views
0
SELECT T1.DESCRIPTION, 
    T1.NAME, 
    T1.EXTERNALKEY, 
    T2.STATECODE 
    FROM TABLE1 T1, TABLE2 T2, TABLE3 T3 
WHERE  T1.CLASSID = 7040 
    AND T2.ID = T3.ID 
    AND T2.RECEIVERID = T1.ID 
    AND T1.OWNERID = (SELECT ID 
         FROM TABLE1 
        WHERE EXTERNALKEY = 'XXX') 
MINUS 
SELECT T1.DESCRIPTION, 
    T1.NAME, 
    T1.EXTERNALKEY, 
    T2.STATECODE 
FROM TABLE3 T3, TABLE1 T1, TABLE2 T2 
WHERE VALUE = 'XXXX' AND T3.ID = T1.ID; 

嗨。這是我的執行查詢,需要很長時間。任何人都可以改變它來優化一個。感謝ü如何減少sql查詢的執行時間?

+1

小心分享你的**表格結構**?另外:你的數據庫中有什麼樣的索引? –

+6

表2沒有出現在查詢的第二部分的where子句中,你得到了一個笛卡爾積...希望這就是你的意圖。 – Mat

+1

@Mat +1好點,使用正確的連接語法會更容易! – Bridge

回答

1

首先我把適當的索引表上,理想的情況是覆蓋索引

0
ALTER TABLE `TABLE1 ` ADD INDEX `index1` (`NAME`, `EXTERNALKEY`); 

ALTER TABLE `TABLE1 ` ADD INDEX `index2` (`OWNERID`); 

ALTER TABLE `TABLE2 ` ADD INDEX `index3` (`STATECODE`); 

ALTER TABLE `TABLE2 ` ADD INDEX `index4` (`RECEIVERID`); 

現在注意查詢的執行時間

0

當然,我們不能幫你沒有執行計劃,但我看到你

SELECT ID 
FROM TABLE1 
WHERE EXTERNALKEY = 'XXX' 

我會建議你要麼使用WITH子句來兌現,或獲得ID與ID%類型的任何PLSQL變量,代替使用它在查詢你的陳述。