(sql执行顺序和原理.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(sql执行顺序和原理

一、sql语句的执行步骤:? 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。? 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。? 3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。? 4)表达式转换, 将复杂的 SQL 表达式转换为较简单的等效连接表达式。? 5)选择优化器,不同的优化器一般产生不同的“执行计划”? 6)选择连接方式, ORACLE 有三种连接方式,对多表连接 ORACLE 可选择适当的连接方式。? 7)选择连接顺序, 对多表连接 ORACLE 选择哪一对表先连接,选择这两表中哪个表做为源数据表。? 8)选择数据的搜索路径,根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。? 9)运行“执行计划”? 二、oracle 共享原理:? ORACLE将执行过的SQL语句存放在内存的共享池(shared buffer pool)中,可以被所有的数据库用户共享 当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的 执行路径. 这个功能大大地提高了SQL的执行性能并节省了内存的使用? 三、oracle 语句提高查询效率的方法:1: wherecolumnin(select*from ... where ...); 2:... whereexists (selectXfrom ...where ...); 第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询 使用EXIST,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间 Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中 避免使用having字句 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销? SQL Select语句完整的执行顺序:? 1、from子句组装来自不同数据源的数据;? 2、where子句基于指定的条件对记录行进行筛选;? 3、group by子句将数据划分为多个分组;? 4、使用聚集函数进行计算;? 5、使用having子句筛选分组;? 6、计算所有的表达式;? 7、使用order by对结果集进行排序? 逻辑查询处理步骤? 代码如下:? Java代码?? (8)SELECT?(9)DISTINCT??? (11)TOP_specification?select_list??? (1)FROM?left_table??? (3)join_type?JOIN?right_table??? (2)   ?ON?join_condition??? (4)WHERE?where_condition??? (5)GROUP?BY?group_by_list??? (6)WITH?{CUBE?ROLLUP}??? (7)HAVING?having_condition??? (10)ORDER?BY?order_by_list??? 每个步骤产生一个虚拟表,该虚拟表被用作下一个步骤的输入。只有最后一步生成的表返回给调用者。如? 果没有某一子句,则跳过相应的步骤。? 1. FROM:对FROM子句中的前两个表执行笛卡尔积,生成虚拟表VT1。? 2. ON:对VT1应用ON筛选器。只有那些使join_condition为真的行才被插入VT2。? 3. OUTER(JOIN):如果指定了OUTER JOIN,保留表中未找到匹配的行将作为外部行添加到VT2,生成VT3。? 如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到? 处理完所有的表为止。? 4. 对VT3应用WHERE筛选器。只有使where_condition为TRUE的行才被插入VT4。? 5. GROUP BY:按GROUP BY 子句中的列列表对VT4中的行分组,生成VT5。? 6. CUBEROLLUP:把超组插入VT5,生成VT6。? 7. HAVING:对VT6应用HAVING筛选器。只有使having_condition为TRUE的组才会被插入VT7。? 8. SELECT:处理SELECT列表,产生VT8。? 9. DISTINCT:将重复的行从VT8中移除,产生VT9。? 10. ORDER BY:将VT9中的行按ORDER BY子句中的列列表排序,生成一个有表(VC10)。? 11. T

文档评论(0)

34shart09 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档