2013-04-11 61 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中编写嵌套循环连接。