[译]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的权 ...
随机推荐
- CodeForces 703B(容斥定理)
题目链接:http://codeforces.com/contest/703/problem/B 解题思路: 第一次写 先求出每个点到其他点的价值,并将其记录 dp[i][j]=1(i<j),然 ...
- php多态设计
原文:http://www.cnblogs.com/tecs27/archive/2012/03/13/2394028.html 多态性是指相同的操作或函数.过程可作用于多种类型的对象上并获得不同的结 ...
- C#面向对象面试题集锦
1.简述C#中的虚方法 答:注意:当使用virtual关键字修饰符后,不允许再同时使用abstract,static,或override关键字进行修饰 使用virtual关键字修饰的方法就是虚方法,虚 ...
- TableInputFormat分片及分片数据读取源码级分析
我们在MapReduce中TextInputFormat分片和读取分片数据源码级分析 这篇中以TextInputFormat为例讲解了InputFormat的分片过程以及RecordReader读取分 ...
- [Effective JavaScript 笔记] 第2条:理解JavaScript的浮点数
JavaScript数值型类型只有数字 js只有一种数值型数据类型,不管是整数还是浮点数,js都把归为数字. typeof 17; // “number” typeof 98.6; // “num ...
- [Effective JavaScript 笔记]第40条:避免继承标准类
ECMAScript标准库里配备了许多重要的类,如Array,function,以及Date等.扩展这些类生成子类可以方便完成很多工作,但它们的定义具有很多特殊的行为,所以很难写出行为正确的类. Ar ...
- Linux时间同步配置方法
由于是在做mongoDB的实验中再一次的遇到了mongos路由节点同步时由于ntp时间的问题导致同步非常的慢.故写了个时间同步的语句===> while :; do rdate -s 192.1 ...
- Linux 之 最常用的20条命令
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- 【系统】CentOS、Ubuntu、Debian三个linux比较异同
CentOS.Ubuntu.Debian三个linux比较异同 2014-07-31 12:58 53428人阅读 评论(6) ...
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...