本文中,我们将介绍两个SQL Server中的可用概念,它们是使用SQL Server时值得注意的技术。

1.        OPTIMIZE FOR Unknown

SQL Server 2005版本中增加了OPTIMIZE FOR提示(hint),允许DBA确定用于基数评估和优化的字面值。如果我们有一张数据分布倾斜的表,OPTIMIZE FOR能被用于优化为广泛范围参数值提供合理性能的通用值。当对所有参数值来说性能并非最好时,相比有时做查找(seek,对于选择性较好的参数值),有时做扫描(scan,对于选择性一般的参数值),所有场景具备同样的执行时间也许会更可取,这依赖于最初编译期间传入的参数值。

不幸的是,OPTIMIZE FOR仅允许字面值。如果变量为类似日期时间(datetime)或顺序数(其本质随时间而增长),那么,确定的任何固定值不久将因变得过时而不得不修改该提示来确定一个新值。即使该参数值域随时间保持相对稳定,但提供字面值时你不得不实验和发现一个足够好的通用值,这有时是很难的或很费时间的。

最后,为OPTIMIZER FOR提供数值将通过改变使用该参数的谓词基数评估而影响计划的选择。在OPTIMIZE FOR提示中,如果你提供了一个不存在或稀有值,那么,你就减少了基数评估值,这将会影响成本和最终计划的选择。

如果你只想得到一个“平均”值而并不关心该值是什么,OPTIMIZE FOR (@variable_name UNKNOWN)提示将导致优化器忽略影响基数评估的这个参数值。取而代之是用柱状图,基数评估将由密度、关键信息或依赖谓词的固定选择性评估得出。这将导致一个并不需要DBA必须一直监视和改变参数值来维护一致性能的可预见评估。

语法变化将告诉优化器忽视所有参数值,这只需确定OPTIMIZE FOR UNKNOWN并漏掉括号和变量名。确定OPTIMIZE FOR将导致ParameterCompiledValue从showplan XML输出中消失,正像参数嗅探(sniffing)没有发生一样。不管传递的参数,最终计划将是一样的,并且,也许会给出更加可预见的查询性能。

2.        QUERYTRACEON 和QUERYRULEOFF

有些场景中,开发人员也许建议用跟踪标志(trace flag)来避免查询计划或优化器问题。或者,他们也许发现禁用某个特定优化器规则会阻止特定问题的发生。一些跟踪标志很常见,以至于难以预见开启这些跟踪标志是否能很好的解决所有查询问题,或该问题是否只针对研究的特定查询。类似的,大多数优化器规则并非本身不好,整个系统范围内禁用该规则可能会导致其他方面的性能退化。

SQL Server 2008中,可以在特定查询运行期间开启某个跟踪标志,或通过如下未被归档QUERYTRACEON或QUERYRULEOFF提示仅在查询编译期间禁用某个优化器规则。

select @v_test=c1from t1 where c1=2 option(recompile,querytraceon 2389);

select @v_test=c1from t1 where c1=2 option(recompile,queryruleoff OmitMyidx);

上述第二个语句显示的语法也许会导致“no plan”错误。预先未与开发人员讨论以确保完全理解该规则及禁用可能带来的后果,就不应该使用QUERYRULEOFF。数据库属主通常拥有创建一个计划指导(plan guide)所需的足够权限,而用QUERYTRACEON/QUERYRULEOFF提示创建一个计划指导则需要sysadmin权限,因为改变这些设置也许有系统而非数据库范围的含义。

结论

最后,清楚你的环境中何时使用这些查询优化或查询调优技术很重要,请在使用这些技术前,分析具体情况并进行足够的测试。.

SQL Server查询优化中的两个选项的更多相关文章

  1. SQL Server 索引中include的魅力(具有包含性列的索引)

    2010-01-11 20:44 by 听风吹雨, 22580 阅读, 24 评论, 收藏, 编辑 开文之前首先要讲讲几个概念 [覆盖查询] 当索引包含查询引用的所有列时,它通常称为“覆盖查询”. [ ...

  2. SQL Server 内存中OLTP内部机制概述(四)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  3. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  4. [转帖]SQL Server 索引中include的魅力(具有包含性列的索引)

    SQL Server 索引中include的魅力(具有包含性列的索引) http://www.cnblogs.com/gaizai/archive/2010/01/11/1644358.html 上个 ...

  5. SQL Server 索引中include的魅力(具有包含性列的索引)(转载)

    开文之前首先要讲讲几个概念 [覆盖查询] 当索引包含查询引用的所有列时,它通常称为“覆盖查询”.  [索引覆盖] 如果返回的数据列就包含于索引的键值中,或者包含于索引的键值+聚集索引的键值中,那么就不 ...

  6. SQL Server 2000中的并行处理和执行计划中的位图运算符

    SQL Server 2000中的并行处理和执行计划中的位图运算符 摘抄自:SQLServer 2000并行处理和位图简介 刘志斌 并行查询介绍Degree of Parallelism(并行度) 一 ...

  7. SQL Server 2008中的Hints(提示)的简单整理

    SQL Server的系统查询过程 负责在SELECT查询执行时候产生查询执行计划.SQL Server会“智能”地选择一个高效计划来取代低效的一个.大多数时候,SQL Server会把这份工作干得很 ...

  8. SQL Server 查询优化 索引的结构与分类

    一.索引的结构 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情 ...

  9. SQL Server 2005 中的分区表和索引

    SQL Server 2005 中的分区表和索引 SQL Server 2005          69(共 83)对本文的评价是有帮助 - 评价此主题   发布日期 : 3/24/2005 | 更新 ...

随机推荐

  1. new和malloc的用法和区别

    从以下几个方面总结下new和malloc的区别: 参考博客: https://blog.csdn.net/nie19940803/article/details/76358673 https://bl ...

  2. Codeforces 781B. Innokenty and a Football League

    题目链接:http://codeforces.com/contest/781/problem/B 去tmd 2-SAT 直接贪心就可以过去了,优先选择第二种情况. 然而....可以被叉掉(数据水了) ...

  3. JS字典 Dictionary类

    字典 Dictionary类 /*字典 Dictionary类*/ function Dictionary() { this.add = add; this.datastore = new Array ...

  4. js常见知识点2.面向对象相关

    一.对象的概念 建议回复: 对象是一个整体,对外提供一些功能. 一切具有属性和方法的事物. 一切具有本质特征和行为的物质. 数据类型:       所有的基本数据类型都没有属性和方法.       所 ...

  5. Unity中角度与弧度之间的相互转换

    弧度数 = 角度数 * Mathf.Deg2Rad角度数 = 弧度数 * Mathf.Rad2Deg

  6. vSphere 扩展硬盘空间

    把所有的snapshot都删除了之后,ssh上去之后,进vmfs目录到client machine的目录. 然后执行下面的方法. 虽然成功了,却没看到有扩展的. 唯一的好处是, vSphone Cli ...

  7. springboot---->错误: 找不到或无法加载主类

    刚开始是往上面箭头指出的方向去找问题的原因,但是试了各种方法后问题还是没有解决,于是乎我把焦点转去查看eclipsede控制台处: 主要的错误提示如下: Archive for required li ...

  8. 20190118_xlVBA多表合并

    Public Sub simple() Set wb = ActiveWorkbook Set sht = ActiveSheet msg = MsgBox("程序准备清除活动工作表内容?按 ...

  9. 2018JavaScript状态调查:5个重要的思考( import takeaways) (摘译)

    英文原文  (内有视频). 以下是翻译和摘录. 最近JS状态调查结构出来了,如果你关心网页开发,你会关心这些结果. 本文探索5个takeaways并总结这些结论. 1. JavaScript Had ...

  10. Selenium自动化测试框架入门整理

    ​​关注嘉为科技,获取运维新知 本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明.作为开发人员.测试人员入门参考. 本文参考:Se ...