[译]SQL Server 之 查询优化器
因为生成查询计划的代价比较大,所以查询计划将会被缓存。
树形结构
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 之 查询优化器的更多相关文章
- 配置SQL Server 2008管理器
SQl Server 配置管理器(简称为配置管理器)包含了SQL Server 2008服务.SQL Server 2008网络配置和SQL Native Client配置3个工具,供数据库管理人员做 ...
- SQL Server的优化器会缓存标量子查询结果集吗
在这篇博客"ORACLE当中自定义函数性优化浅析"中,我们介绍了通过标量子查询缓存来优化函数性能: 标量子查询缓存(scalar subquery caching)会通过缓存结果减 ...
- SQL Server 2005 无法连接到WMI提供程序 无法执行 SQL Server 系统配置检查器
无法连接到WMI提供程序.你没有权限或者该服务器无法访问/cannot connect to WMI provider. You do not have permission or the--由于计算 ...
- MS SQL Server数据库查询优化技巧
[摘 要]本文主要是对MS SQL Server数据库查询优化技巧进行了说明和分析,对索引使用.查询条件以及数据表的设计等进行了阐述.中国论文网 http://www.xzbu.com/2/view- ...
- SQL Server中追踪器Trace的介绍和简单使用
一.What is Trace? 对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Management Studio>工具>SQL Ser ...
- [译]SQL Server 之 查询计划缓存和重编译
查询优化是一个复杂而且耗时的操作,所以SQL Server需要重用现有的查询计划.查询计划的缓存和重用在多数情况下是有益的的,但是在某些特殊的情况下,重编译一个查询计划可能能够改善性能. SELECT ...
- SQL优化系列——查询优化器
大多数查询优化器将查询计划用“计划节点”树表示.计划节点封装执行查询所需的单个操作.节点被布置为树,中间结果从树的底部流向顶部.每个节点具有零个或多个子节点 - 这些子节点是输出作为父节点输入的节点. ...
- sql server 对象资源管理器(二)
SQL会缓存大量的数据页面,他还会缓存很多其他信息,包括存储过程的执行计划 ,特定用户的安全上下文等 如果这些信息没有在数据库中缓存,SQL都要重新计算一遍,花额外的时间,所以SQLSERVER对内存 ...
- [译]SQL Server分析服务的权限配置
简介: 本文介绍如何配置SSAS数据库和cube相关维度的安全设置. 相对数据引擎来说,在Management Studio中配置分析服务的安全设置基本没什么区别.但是也会有一些限制,比如SSAS的权 ...
随机推荐
- POI读写Excel简述之写入
二.POI写入Excel文件(以Excel2003版为例,2007版就是根据文件扩展名xlsx将HSSFWorkbook换为XSSFWorkbook,及其Sheet.Row.Cell也相应替换) 1. ...
- pthread_exit
当主线程调用pthread_exit时,其余线程不退出,继续执行 当主线程调用exit/或return时,其余线程退出,整个进程都退出了. #include <pthread.h> #in ...
- Oracle 10g 和11g r2 下载地址(使用迅雷)
http://www.blogjava.net/wangdetian168/archive/2011/03/01/345428.html 10g http://www.blogjava.net/wa ...
- JavaScript 最佳实践
这个文档是基于JavaScript社区众多开发者的意见和经验,在开发JavaScript代码上的最佳实践和首选的方案的明细表.因为这是一个推荐的表而非原则性的方案,经验丰富的开发者可能对下面的表达会有 ...
- [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法
不好的实践 函数或方法的接收者(即绑定到特殊关键字this的值)是由调用者的语法决定的.方法调用语法将方法被查找的对象绑定到this变量,(可参阅之前文章<理解函数调用.方法调用及构造函数调用之 ...
- 利用LineRenderer画出一个圆,类似于lol中的攻击范围
http://www.unity蛮牛.com/blog-5945-1409.html 本人大四狗,学unity半年有余,写此文章纯粹记录自己的心得. 废话不多说,进入主题.... 效果如图: 首先要理 ...
- [COJ0988]WZJ的数据结构(负十二)
[COJ0988]WZJ的数据结构(负十二) 试题描述 输入 见题目,注意本题不能用文件输入输出 输出 见题目,注意本题不能用文件输入输出 输入示例 输出示例 数据规模及约定 1≤N≤1500,M≤N ...
- [BZOJ4636]蒟蒻的数列
[BZOJ4636]蒟蒻的数列 试题描述 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k ...
- macbook air 安装win7双系统
转自: http://jingyan.baidu.com/article/6d704a13f99f1a28da51ca49.html 1)遇到“No bootable device-insert bo ...
- TypeError: document.formname.submit is not a function
<form name="formname" ...> .... <input name="submit" type="submit& ...