加入Cursor查询或两个游标,哪个更快?

vsit 发布于 2019-03-09 cursor 最后更新 2019-03-09 14:40 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;
从第一个游标内的另一个游标中的第二个表获取数据比第一个游标本身中的所有内容都更好?
已邀请:

fnam

赞同来自:

构建数据库以加入。在绝大多数情况下,最好让数据库在SQL中进行连接,而不是尝试在PL / SQL中编写自己的连接。 如果您知道需要嵌套循环连接并且Oracle优化器选择效率低得多的计划,那么在PL / SQL中编写连接的唯一方法就是如何。但是,在这种情况下,您最好让优化器为您提供所需的计划,而不是在PL / SQL中编写嵌套循环连接。