2013-10-09 61 views
0

我想獲取不在同一個表的其他列和其他兩個表中的其他列的所有索引。
我的查詢工作正常。
有沒有其他方法可以更快地獲得相同的結果? 獲取所有值不在同一表和另一個表的另一列

 
SELECT Index 
     FROM temptable A 
     WHERE NOT EXISTS(select 1 
          from temptable B 
          where A.Index = B.Index2) 
     AND NOT EXISTS (SELECT 1 
          FROM temptable2 B 
          WHERE A.Index = B.INDEX) 
     AND NOT EXISTS (SELECT 1 
          FROM temptable3 B 
          WHERE A.Index = B.INDEX) 
     AND type = 'G'; 

+0

你這是什麼意思指數?它是Oracle索引還是稱爲索引的列名? – SriniV

+0

列名索引.. – RiderHood

+0

真的是一個壞主意,使用ORACLE reserverd關鍵詞作爲列名。 – SriniV

回答

0

就拿這個example

看看更換其中不與左連接會給你更好的性能

0

我不知道這是否會更快或不獲取數據存在,但是它取決於在索引列上創建的索引。如果索引列是主鍵,那麼它肯定會做INDEX FAST FULL SCAN,即使對於唯一/非唯一索引它也會返回這樣的結果。

SELECT Index 
    FROM temptable A 
WHERE type = 'G'; 
MINUS 
    (select index2 
    from temptable B 
    union 
    SELECT index 
    FROM temptable2 B 
    union 
    SELECT index 
    FROM temptable3 B 
    ) ; 
+0

這不起作用... – RiderHood

+0

@ user2257655:不能正常工作,什麼是錯誤信息 –

0

你可以試試這個:我沒有測試過,因爲我沒有資源

SELECT 
     TABLE1.INDEX 
FROM 
      (SELECT INDEX FROM TEMPTABLE WHERE TYPE = 'G') TABLE1 
     LEFT OUTER JOIN TEMPTABLE TT1 ON TABLE1.INDEX = TT1.INDEX2 
     LEFT OUTER JOIN TEMPTABLE2 TT2 ON TABLE1.INDEX = TT2.INDEX 
     LEFT OUTER JOIN TEMPTABLE3 TT3 ON TABLE1.INDEX = TT3.INDEX 
WHERE 
     TT2.COLUMNB IS NULL; 

Add indexes on the `columns TEMPTABLE.INDEX, TEMPTABLE.INDEX2, TEMPTABLE2.INDEX, TEMPTABLE3.INDEX` 
相關問題