2013-04-11 60 views
0

我需要一些針對我的遊標的建議,這些遊標預計會針對數百萬條記錄運行。這是我的光標查詢。加入遊標查詢或兩個遊標,哪個更快?

CURSOR items_cursor IS  -- Brings only records that need to be updated 
     SELECT a.*, b.* FROM 
     (SELECT DataId, Name, VersionNum, OwnerId, SubType, LEVEL Lev FROM DTree 
      START WITH ParentId = startFrom CONNECT BY PRIOR DataId= ABS(ParentId)  -- Brings ABS of ParentId 
     )a, 
     (     
     SELECT o.DataId pDataId, o.Permissions OwnerPerm, p.Permissions PublicPerm FROM DTreeAcl o, DTreeAcl p WHERE 
     o.DataId=p.Dataid AND o.AclType=1 AND p.AclType=3 AND (o.Permissions != ownerPerm OR p.Permissions != publicPerm) 
     )b   
     WHERE a.Lev >= 1 AND a.Lev <= 3 AND a.DataId = b.pDataId; 

從第一個遊標中的另一個遊標中的第二個表中獲取數據比在第一個遊標本身中加入所有內容更好嗎?

回答

3

構建數據庫以加入。在絕大多數情況下,最好讓數據庫在SQL中執行連接,而不是嘗試在PL/SQL中編寫自己的連接。

只有這樣,你會更好寫在PL/SQL的連接就可以,如果你知道你想要一個嵌套循環連接和Oracle優化器選擇一個有效的要少得多的計劃。但是,在這種情況下,最好讓優化器給你所需的計劃,而不是在PL/SQL中編寫嵌套循環連接。