- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基础:如何编写优化的sql语句.doc
SQL的优化器执行分析
在ORACLE RDBMS SERVER软件的内部,对于SQL语句的执行有一个优化器(OPTIMIZER)对SQL语句的执行进行优化。在我们使用后面介绍的工具对SQL的执行路径进行查看的时候,系统显示出来的是由优化器给出的执行路径的解释方案,如果对优化器的解释方案不了解的话,就无法针对出现的问题进行SQL语句的调整。现把ORACLE8提供的优化器的执行解释方案公布如下。
这部分内容的详细解释可以参照oracle的文档。这里给出的是快速参考。实际上,这些操作的含义往往名字上就可以表现出来,不用查手册。
如何看SQL解释方案
Execution Plan
----------------------------------------------------------
1 SELECT STATEMENT Optimizer=CHOOSE (Cost=94 Card=1)
2 SORT (AGGREGATE)
3 COUNT (STOPKEY)
4 INDEX (FULL SCAN) OF PK_TBI_TM (UNIQUE) (Cost=94 Car
d=27164)
(图1)
图1为ORACLE对语句“select count(*) from tbi_tm where rownum10”给出的一个执行的解释方案,那我们该如何看这个方案呢?我们在看这个执行方案的时候要遵循一个原则“由里到外,由高到低”,同时“由里到外”不能违反“由高到低”的原则。因此上述的语句的执行步骤顺序为:4、3、2;假设存在一个步骤5的话,而且它的层次同3一致,那么,上述语句的执行步骤顺序就会改为:4、3、5、2。在图1中还给出了执行了何种操作(例如:INDEX(FULL SCAN),COUNT (STOPKEY)等,具体的说明在下面进行解释),同时在最后还给出了执行的代价(COST)。
SQL解释方案介绍
操作说明
系统中的全部操作可分为行操作或集(SET)操作。二者之间的比较可以对比如下:
行操作 集操作 一次执行一行 在行的结果集上执行 如果不涉及集操作将在FETCH级上操作 当光标打开时,在EXECUTE级上执行 在取最后一行之前,用户可以看到第一次的结果 用户不能看到第一次的结果,直到所有的行被取出和处理完 示例:全表扫描 示例:使用group by子句的全表扫描
对于行和集操作的分类如下(暂时列到ORACLE 8):
行操作 集操作 And-equal,Bitmap,Concatenation,Count stopkey,Filter,For update,Index full scan,Index range scan,Index unique scan,Intersection,Merge join,Nested loops,Outer join,Projection,Sequence,Table access by rowid,Table access cluster,Table access full,Table access hash,Union,Union-all Connect by,Count,Hash join,Minus,Remote, Sort aggregate,Sort group by,Sort join,Sort order by,Sort unique,View 具体操作解释
在上述的操作中有许多我们平时很少用到,因此就不一一介绍了,只介绍日常常用的一些操作:
约定
Table_name Column_name Index_type Company Company_id U_ind City Ind State Ind Parent_company_id Ind Competitor Company_id U_ind Product_id U_ind Sales Company_id U_ind Period_id U_ind
AND-EQUAL
说明:用来合并由索引返回的值的排序列表。AND-EQUAL用于非唯一索引的合并和唯一索引的范围扫描。
例子:select name,city,state from company where city=’Roanoke’ and state=’VA’
CONCATENATION
说明:用来执行结果集的union all操作
例子:select name,city,state from company where state=’TX’ and city in (‘Houston’,’Austin’,’Dallas’);
该例子最
文档评论(0)