sqlserver——你真的懂你写的Sql语句么?

来源:互联网 发布:js高阶函数 编辑:程序博客网 时间:2024/06/05 18:31

引言:说来惭愧,写了这么久,也写了这么多的sql语句。玩了好几年的sqlserver了,今天才了解到这些东西。不多说,赶紧补吧!

一、SQL Server 处理单个 SELECT 语句的基本步骤

  1. 分析器扫描 SELECT 语句并将其分成逻辑单元(如关键字、表达式、运算符和标识符)。

  2. 生成查询树(有时称为“序列树”),以描述将源数据转换成结果集需要的格式所用的逻辑步骤。

  3. 查询优化器分析访问源表的不同方法,然后选择返回结果速度最快且使用资源最少的一系列步骤。更新查询树以确切地记录这些步骤。查询树的最终、优化的版本称为“执行计划”。

  4. 关系引擎开始执行计划。在处理需要基表中数据的步骤时,关系引擎请求存储引擎向上传递从关系引擎请求的行集中的数据。

  5. 关系引擎将存储引擎返回的数据处理成为结果集定义的格式,然后将结果集返回客户端。


二、重要概念补充:

  1、 查询优化器:

    SELECT 语句是非程序性的,它不规定数据库服务器检索请求的数据的确切步骤。这意味着数据库服务器必须分析语句,以决定提取所请求数据的最有效方法。这称之为“优化 SELECT 语句”。处理此过程的组件称为“查询优化器”。它是 SQL 数据库系统的最重要组件之一。虽然查询优化器在分析查询和选择计划时要使用一些开销,但当查询优化器选择了有效的执行计划时,这一开销将节省数倍。例如,两家建筑公司可能拿到一所住宅的相同设计图。如果一家公司开始时先花几天时间规划如何建造这所住宅,而另一家公司不做任何规划就开始施工,则花了时间规划项目的那家公司很可能首先完工。

   SQL Server 查询优化器是基于成本的优化器。就所使用的计算资源量而言,每个可能的执行计划都具有相关成本。查询优化器必须分析可能的计划并选择一个预计成本最低的计划。有些复杂的 SELECT 语句有成千上万个可能的执行计划。在这些情况下,查询优化器不会分析所有的可能组合,而是使用复杂的算法查找一个执行计划:其成本合理地接近最低可能成本。

   SQL Server 查询优化器不只选择资源成本最低的执行计划,还选择能将结果最快地返回给用户且资源成本合理的计划。例如,与串行处理查询相比,并行处理查询使用的资源一般更多但完成查询的速度更快。因此如果不对服务器的负荷产生负面影响,SQL Server 优化器将使用并行执行计划返回结果。

   查询优化器在估计从表或索引中提取信息的不同方法所需的资源成本时,依赖于分发内容统计信息。对列和索引保留有分发内容统计。这些统计信息表明特定索引或列中的值的选择性。例如,在一个代表汽车的表中,很多汽车出自同一制造商,但每辆车都有唯一的车牌号 (VIN)。VIN 索引比制造商索引更具选择性。如果索引统计信息不是当前的,则查询优化器可能无法对表的当前状态做出最佳选择。有关保持索引统计信息最新的详细信息,请参阅使用统计信息提高查询性能

   查询优化器很重要,因为它可以使数据库服务器针对数据库内的更改情况进行动态调整,而无须程序员或数据库管理员输入。这样程序员可以集中精力描述最终的查询结果。他们可以相信每次运行语句时,查询优化器总能针对数据库的状态生成一个有效的执行计划。

    输入:select、update、insert、delete等sql语句。数据库方案(表和索引的定义)以及数据库统计信息。

    输出:“查询执行计划”,有时也称为“查询计划”或直接称为“计划”。

如图:

  2、数据库统计信息:

   在创建索引的时候,SQLServer就会在索引列上创建统计信息。简单来说,统计信息就是索引或者列上能够描述数据分布的数据。

     作用:如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况


三、sql语句的执行过程:

1.FROM

2.ON

3.JOIN

4.WHERE

5.GROUP BY

6.WITH CUBE or WITH ROLLUP

7.HAVING

8.SELECT

9.DISTINCT

10.ORDER BY

11.TOP

小结:

   sql语句每一步的执行,都返回一个虚拟表。根据子句的条件,不断对返回的虚拟表进行修改,以期返回最终用户需要的结果。如无必要,不要使用order by ,这样会增加开销。

四、总结:

   学习就是这样,越来越发现自己懂得太少。也发现一个事实,相要一开始就能把握或者认识一个事物的全貌,几乎是不可能的。但是,这并不意味这,宏观的总结工作就不用做了。相反的,我们要在一开始就建立一张导图,然后在后期的学习过程之中不断完善和扩充咱们的知识导图。这,是一个过程!



0 0
原创粉丝点击