|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
当然,或许这并不是我们拒绝MySQL的一个有说服力的MySQL学习教程,但是对于一些比较守旧的IT经理来说,在为一些关键业务选择平台的时候,平台的成熟性却是必须要考虑的一个因素,在这一点上,MySQL无疑毫无优势。实行企图的步骤
实行企图的每步前往一组行,它们大概为下一步所利用,大概在最初一步时前往给收回SQL语句的用户或使用。由每步前往的一组行叫做行源(rowsource)。-1树状图显现了从一步到另外一步行数据的活动情形。每步的编号反应了在你察看实行企图时所示步骤的按次(怎样察看实行企图将被冗长地申明)。一样平常来讲这并非每步被实行的前后按次。实行企图的每步大概从数据库中检索行,大概吸收来自一个或多个行源的行数据作为输出:
由白色字框指出的步骤从数据库中的数据文件中物理检索数据。这类步骤被称之为存取路径,前面会具体先容在Oracle可使用的存取路径:
第3步和第6步分离的从EMP表和SALGRADE表读一切的行。
第5步在PK_DEPTNO索引中查找由步骤3前往的每一个DEPTNO值。它找出与DEPT表中相干联的那些行的ROWID。
第4步从DEPT表中检索出ROWID为第5步前往的那些行。
由玄色字框指出的步骤外行源上操纵,如做2表之间的联系关系,排序,或过滤等操纵,前面也会给出具体的先容:
第2步完成嵌套的轮回操纵(相称于C语句中的嵌套轮回),吸收从第3步和第4步来的行源,把来自第3步源的每行与它第4步中响应的行毗连在一同,前往了局行到第1步。
第1步完成一个过滤器操纵。它吸收来自第2步和第6步的行源,打消失落第2步中来的,在第6步有响应行的那些行,并未来自第2步的剩下的行前往给收回语句的用户或使用。
完成实行企图步骤的按次
实行企图中的步骤不是依照它们编号的按次来完成的:Oracle起首完成-1树布局图形里作为叶子呈现的那些步骤(比方步骤3、5、6)。由每步前往的行称为它下一步骤的行源。然后Oracle完成父步骤。
举例来讲,为了实行-1中的语句,Oracle以以下按次完成这些步骤:
起首,Oracle完成步骤3,并一行一行地将了局行前往给第2步。
对第3步前往的每行,Oracle完成这些步骤:
--Oracle完成步骤5,并将了局ROWID前往给第4步。
--Oracle完成步骤4,并将了局行前往给第2步。
--Oracle完成步骤2,将承受来自第3步的一行和来自第4步的一行,并前往
给第1步一行。
--Oracle完成步骤6,假如有了局行的话,将它前往给第1步。
--Oracle完成步骤1,假如从步骤6前往行,Oracle未来自第2步的行前往给
收回SQL语句的用户。
注重Oracle对由第3步前往的每行完成步骤5,4,2,6一次。很多父步骤在它们能实行之前只必要来自它们子步骤的单一行。对如许的父步骤来讲,只需从子步骤已前往单一行时当即完成父步骤(大概另有实行企图的其他部分)。假如该父步骤的父步骤一样能够经由过程单一行前往激活的话,那末它也一样被实行。以是,实行能够在树上串连上往,大概包括实行企图的余下部分。关于如许的操纵,可使用first_rows作为优化方针以便于完成疾速呼应用户的哀求。
对每一个由子步骤顺次检索出来的每行,Oracle就完成父步骤及一切串连在一同的步骤一次。对由子步骤前往的每行所触发的父步骤包含表存取,索引存取,嵌套的轮回毗连和过滤器。
有些父步骤在它们被完成之前必要来自子步骤的一切行。对如许的父步骤,直到一切行从子步骤前往之前Oracle不克不及完成该父步骤。如许的父步骤包含排序,排序一兼并的毗连,组功效和总计。关于如许的操纵,不克不及利用first_rows作为优化方针,而能够用all_rows作为优化方针,使该中范例的操纵泯灭的资本起码。
偶然语句实行时,并非象下面说的那样一步一步有先有后的举行,而是大概并交运行,如在实践情况中,3、5、4步大概并交运行,以便获得更好的效力。从下面的树型图上,是很丢脸出各个操纵实行的前后按次,而经由过程ORACLE天生的另外一种情势的实行企图,则能够很简单的看出哪一个操纵先实行,哪一个后实行,如许的实行企图是我们真正必要的,前面会给出具体申明。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044799.aspx怀疑这些功能在MySQL5.0中的成熟性。充其量它们在MySQL中被支持的时间也就一年左右,而在MySQL学习教程其他关系型数据库中则已经存在了近10年的时间。 |
|