因为生成查询计划的代价比较大,所以查询计划将会被缓存。

树形结构

SQL 查询首先被转化为树形结构,每个节点都是一个查询操作。例如:

SELECT  *
FROM    Customers C
        INNER JOIN Orders O ON C.cid = O.cid
WHERE   O.date = '2008-11-06'

可能转化成如下的树形结构

什么是优化

首先,查询优化器没有办法找到最佳的执行计划。很多复杂的情况下这个目标都是无法实现的。

所以查询优化器只会尽快的找到比较好的查询计划。

优化如何工作?

规则

查询优化器有各种各样的规则。根据这些规则产生不同的树形结构。这些结构中最好的输出将会成为查询优化器最终的执行计划。

特性

特性能够从更高的层面上优化查询树

SELECT  col1 ,
        col2 ,
        MAX(col3)
FROM    Table1
GROUP BY col1 ,
        col2 ;

如果col1和col2上有惟一约束的话,就完全没有必要做MAX和GROUP BY的操作。

SELECT  *
FROM    DomainTable D1
        INNER JOIN DomainTable D2 ON D1.col1 = D2.col1
WHERE   D1.col1 > 5
        AND D2.col1 < 0 ;

这里显然查询条件有矛盾,查询优化器直接就不需要查询了。

操作

SQL Server 2008有大概40多个逻辑操作和更多的物理操作。

Semi-Join

半连接用来搞起例如两个表join但是只返回其中一个表结果的情况。多数子查询都是通过半连接的方式来处理的。

Spools

SQL Server 有很多功能不同的池。它们都做同样的功能,从input里面读取所有的行,然后将这些记录存在内存或者磁盘上,然后允许查询直接读取这些缓存。

限制

尽管大多数时候,查询优化器干的不错,但是以下几种情况总是工作的不好。

多个判断条件在同一个操作中

很深的查询树

一些不常用的操作

索引选择

索引有两种操作,Seek 和 Scan

判断能够转换成索引操作的通常称为sargable.

[译]SQL Server 之 查询优化器的更多相关文章

  1. 配置SQL Server 2008管理器

    SQl Server 配置管理器(简称为配置管理器)包含了SQL Server 2008服务.SQL Server 2008网络配置和SQL Native Client配置3个工具,供数据库管理人员做 ...

  2. SQL Server的优化器会缓存标量子查询结果集吗

    在这篇博客"ORACLE当中自定义函数性优化浅析"中,我们介绍了通过标量子查询缓存来优化函数性能: 标量子查询缓存(scalar subquery caching)会通过缓存结果减 ...

  3. SQL Server 2005 无法连接到WMI提供程序 无法执行 SQL Server 系统配置检查器

    无法连接到WMI提供程序.你没有权限或者该服务器无法访问/cannot connect to WMI provider. You do not have permission or the--由于计算 ...

  4. MS SQL Server数据库查询优化技巧

    [摘 要]本文主要是对MS SQL Server数据库查询优化技巧进行了说明和分析,对索引使用.查询条件以及数据表的设计等进行了阐述.中国论文网 http://www.xzbu.com/2/view- ...

  5. SQL Server中追踪器Trace的介绍和简单使用

    一.What is Trace? 对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Management Studio>工具>SQL Ser ...

  6. [译]SQL Server 之 查询计划缓存和重编译

    查询优化是一个复杂而且耗时的操作,所以SQL Server需要重用现有的查询计划.查询计划的缓存和重用在多数情况下是有益的的,但是在某些特殊的情况下,重编译一个查询计划可能能够改善性能. SELECT ...

  7. SQL优化系列——查询优化器

    大多数查询优化器将查询计划用“计划节点”树表示.计划节点封装执行查询所需的单个操作.节点被布置为树,中间结果从树的底部流向顶部.每个节点具有零个或多个子节点 - 这些子节点是输出作为父节点输入的节点. ...

  8. sql server 对象资源管理器(二)

    SQL会缓存大量的数据页面,他还会缓存很多其他信息,包括存储过程的执行计划 ,特定用户的安全上下文等 如果这些信息没有在数据库中缓存,SQL都要重新计算一遍,花额外的时间,所以SQLSERVER对内存 ...

  9. [译]SQL Server分析服务的权限配置

    简介: 本文介绍如何配置SSAS数据库和cube相关维度的安全设置. 相对数据引擎来说,在Management Studio中配置分析服务的安全设置基本没什么区别.但是也会有一些限制,比如SSAS的权 ...

随机推荐

  1. Nonove js timer 计时器

    <html> <head> <title> Nonove js timer 计时器 </title> </head> <body> ...

  2. 使用guava带来的方便

    ​    ​guava是在原先google-collection 的基础上发展过来的,是一个比较优秀的外部开源包,最近项目中使用的比较多,列举一些点.刚刚接触就被guava吸引了... ​    ​这 ...

  3. [Redis]c# redis缓存辅助类

    public static class RedisCache { private static IRedisClient RCClient = null; /// <summary> // ...

  4. URAL 1932 The Secret of Identifier 题解

    http://acm.timus.ru/problem.aspx?space=1&num=1932 B - The Secret of Identifier Time Limit:1000MS ...

  5. iOS开发之#iPhone6与iPhone6Plus适配#Xcode6.0/Xcode6.1上传应用过程中一些变动以及#解决方案#

    更新时间2014年11月13日  本博文创建时,只有Xcode6.0, Xcode6.0尝试多次,确实如此 之后在6.1版本经博主少量尝试,确实也有如下问题,现更新下博客! iOS8发布之后,苹果强制 ...

  6. socket基本

    fd_set用法: http://blog.sina.com.cn/s/blog_5c8d13830100erzs.htm socket连接: lpszHost="127.0.0.1&quo ...

  7. HDU 4915 Parenthese sequence

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4915 解题报告:从前往后遍历一次,每次判断')'的数目是不是满足 n < (i +1)/ 2,从 ...

  8. UCloud可用区的设计理念及功能图文详解

    导读 过去的几个月内,UCloud对自身的云计算基础架构进行了全面升级,于日前宣布基础架构全面支持地域和可用区,并将可用区项目命名为Sixshot.通过这两层的设计架构来组织云服务,可以为用户提供高可 ...

  9. POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  10. typedef 各类定义,各类问题大全

    第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定 ...