`
Supanccy2013
  • 浏览: 223778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

sql语句执行顺序

阅读更多
一,select语句执行流程
   FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1
   ON:对vt1表应用ON筛选器只有满足< join_condition> 为真的行才被插入vt2
   OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部  
   行添加到vt2 生成t3如果from包含两个以上表则对上一个联结生成的结果表和下一个表重复执 
   行步骤和步骤直接结束
   WHERE:对vt3应用 WHERE 筛选器只有使< where_condition> 为true的行才被插入vt4
   GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5
   CUBE|ROLLUP:把超组(supergroups)插入vt6 生成vt6
   HAVING:对vt6应用HAVING筛选器只有使< having_condition> 为true的组才插入vt7
   SELECT:处理select列表产生vt8
   DISTINCT:将重复的行从vt8中去除产生vt9
   ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10
   TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者
二:sql优化
1,避免不恰当的使用“SELECT *”
   如果 SQL 语句使用了“SELECT *”,DB2 就需要把表的所有列都从外部存储介质上(如磁带或者硬盘)复制到 DB2 的内存中来进行处理并且返回给用户,这显然会增加 I/O 和 CPU 的开销。而且如果这条 SQL 语句还包括了排序(Sort)操作(比如 ORDER BY),那么对全部这些列进行排序也可能会影响到性能。而且当表定义的列越多,每个列定义的数据类型(Data type)长度越长,这对性能的影响就可能越明显。

2,避免在本地谓词的列上使用复杂表达式(会导致该列的索引失效)
  YEAR(Date) > 2004 和 Amount > 1000 都是两个本地谓词。然而在前一个谓词 YEAR(Date) > 2004 中,它对 Date 这个列有一个函数 YEAR 的调用。在这种情况下,即使 Date 上存在一个索引,DB2 也无法使用这个索引来访问数据。如果能够在确保语义不变的前提下,适当改写这个谓词,避免在 Date 列上调用函数,那么情况可能会有所不同。例如,这个谓词可以改写为如下的样子
   实例:
    SQL 1:select l_quantity, l_comment from lineitem
           where l_orderkey + 100 = 200
    SQL 2:select l_quantity, l_comment from lineitem
           where l_orderkey = 100
    解析:sql1会导致l_orderkey列上的索引失效。sql2则不会。所以正确的写法为sql2.

3,避免用复杂表达式构建连接谓词
    Select T1.C1 From T1, T2 Where T1.C1 * T1.C2 = T2.C2
    在连接谓词 T1.C1 * T1.C2 = T2.C2 中,“=”左边不是一个列名,而是一个表达式,它涉及 T1 表上不同列之间的计算。对于这样一个用复杂表达式构建的连接谓词,DB2 只能用 Nested-Loop-Join 这种最基本的方式来建立 T1 和 T2 之间的连接,而不考虑用其他的连接方式,从而也就无法选择最优的连接方式。所以这种在连接谓词中使用复杂表达式的写法不是一个好的习惯,在写 SQL 语句时应该注意避免。

分享到:
评论

相关推荐

    SQL语句执行顺序说明

    ### SQL语句执行顺序说明 #### 一、SQL语句准备执行阶段 当SQL语句进入Oracle的库缓存后,为了确保其能够被正确执行,Oracle会经历一系列的检查和准备过程。这一阶段主要涉及以下几个步骤: 1. **语法检查**:...

    sql语句的顺序是怎么执行的

    Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序

    SQL语句执行顺序图文介绍

    SQL语句的执行顺序对于理解和优化查询性能至关重要。本篇文章将详细解释SQL语句,特别是SELECT语句的执行流程。 首先,我们需要理解SQL语句的基本结构,通常包括以下几个部分:SELECT、FROM、WHERE、GROUP BY、...

    SQL语句执行顺序详解

    SQL语句执行顺序是数据库操作中的关键概念,对于编写高效的SQL查询至关重要。下面将详细解释SQL语句的各个部分以及它们在执行时的顺序。 首先,我们要明确的是,SQL语句的基本结构通常由以下几个部分组成:SELECT、...

    SQL语句的执行原理及顺序

    了解 SQL 语句的执行顺序可以帮助开发人员更好地优化查询语句,提高数据库性能。 SQL 语句的执行顺序可以分为 11 个步骤: 1. FROM 子句:首先对 FROM 子句中的前两个表执行一个笛卡尔乘积,生成虚拟表 vt1。 2. ...

    关于SQL语句执行效率的研究.pdf

    通过对SQL语句执行顺序的分析,我们可以更好地理解和优化SQL语句,以提高数据库操作的效率。总的来说,良好的SQL编码习惯和优化技巧对于数据库性能的提升至关重要。随着计算机技术的不断进步,对数据库性能的要求也...

    通过分析SQL语句的执行计划优化SQL(总结)

    在数据库管理中,SQL语句的执行效率是关键因素之一,尤其在处理大量数据时。通过对SQL语句的执行计划进行分析,我们可以找到优化查询性能的策略,从而提高数据库系统的整体性能。这篇博客"通过分析SQL语句的执行计划...

    通过分析SQL语句的执行计划优化SQL.doc

    Probed Table是在连接操作中被驱动表查询的数据表,这两者的确定会影响查询的执行顺序和性能。 在优化SQL时,使用绑定变量是提高共享SQL利用率的有效手段。绑定变量允许SQL语句中的某些值被动态替换,而不改变语句...

    oracle 查看当前会话执行的sql语句

    `order by piece asc`是为了按照SQL语句的片段顺序排列。 #### 3. 监控当前会话的等待事件 除了查看SQL语句本身,我们还需要关注会话的等待事件,这些事件可能会影响SQL语句的执行效率。 ```sql -- 查询当前会话...

    SQL语句中SELECT语句的执行顺序

    ### SQL语句中SELECT语句的执行顺序 在SQL语言中,`SELECT`语句是进行数据查询的核心工具。为了确保查询结果的准确性和效率,理解`SELECT`语句内部的执行顺序至关重要。本文将详细解析`SELECT`语句各子句的执行...

    T-SQL语句执行的顺序

    了解T-SQL语句的执行顺序对于优化查询性能和编写更高效的代码至关重要。以下是对标题和描述中所述知识点的详细说明: 1. **SELECT**: SELECT语句用于从一个或多个表中选取数据。在T-SQL中,这是执行的第一步,它...

    SQL Select语句完整的执行顺序

    ### SQL Select 语句完整的执行顺序 在数据库查询语言(SQL)中,`SELECT`语句是最常用的查询数据的方式之一。正确理解`SELECT`语句的执行顺序对于编写高效、准确的查询至关重要。本文将详细介绍SQL Select语句的...

    SQL语句执行深入讲解(MySQL架构总览-查询执行流程-SQL解析顺序)

    本文将深入探讨MySQL数据库系统中的SQL语句执行过程,包括MySQL的架构总览、查询执行流程以及SQL语句的解析顺序。 首先,我们来看MySQL的架构总览。MySQL架构分为两个主要层次:SQL Layer(SQL层)和Storage Engine...

    数据库总结–SQL语句执行顺序

     关于Oracle,我们都已经学习了SQL语句,那么Oracle其实已经学习了一大半,接下来自己学习Oracle主要是看一下他的概念,Oracle和SQL Server还是有很大不同的,熟悉他的表空间这些概念,了解他的图形界面,和备份...

    批处理执行sql语句

    这包括可能需要的环境设置、权限要求、执行顺序、可能出现的问题及解决方案等。遵循这份说明,用户可以安全地、正确地进行数据库的批量升级操作。 批处理执行SQL语句的应用广泛,尤其是在大型系统维护、数据库版本...

    SQL语言到自然语言自动翻译的研究

    因此,我们创新性的提出了按照SQL语句执行顺序来实现SQL到自然语言的翻 译。本文主要做的工作如下:(1) 设计了SQL语言的词法规则、语法规则,然后利用 ANTLR工具生成SQL语句对应的抽象语法树。(2) 设计了SQL对应的...

    oracle执行计划

    执行计划表示了SQL语句执行顺序与方法。 执行计划的存储方式: 一但产生执行计划。这个计划就会和sql语句一起存储在library cache中。sql语句按照hash的算法,产生hash 值,这里,我们可以把hash值当做一个PK值,...

    ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率.pdf

    ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率 在Oracle中,SQL语句的执行顺序是非常重要的。了解了SQL语句的执行顺序,我们可以更好地优化SQL语句,提高查询效率。下面我们将详细介绍ORACLE-Select语句...

    Oracle SQL语句执行计划的探讨.pdf

    Oracle SQL语句执行计划是数据库管理系统中非常关键的一部分,它决定了SQL查询如何在数据库中执行,从而直接影响到查询效率和整体系统性能。Oracle数据库通过共享池来存储已解析的SQL语句及其执行计划,以此避免对...

Global site tag (gtag.js) - Google Analytics