仓酷云

标题: 发布经由过程剖析SQL语句的实行企图优化SQL(六) [打印本页]

作者: 再见西城    时间: 2015-1-16 20:10
标题: 发布经由过程剖析SQL语句的实行企图优化SQL(六)
当然,或许这并不是我们拒绝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年的时间。
作者: 再现理想    时间: 2015-1-18 18:23
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
作者: 兰色精灵    时间: 2015-1-23 07:13
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
作者: 因胸联盟    时间: 2015-1-31 15:37
可以动态传入参数,省却了动态SQL的拼写。
作者: 变相怪杰    时间: 2015-2-6 20:15
大侠们有推荐的书籍和学习方法写下吧。
作者: 爱飞    时间: 2015-3-6 07:47
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
作者: 透明    时间: 2015-3-12 22:54
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
作者: 第二个灵魂    时间: 2015-3-20 05:06
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2