查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划。很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用手段。另外如果你是一个公司的dba 并且你对你所维护的数据库了如指掌,对业务也有相当深刻的了解那么查询提示也是你的一把利器。

    但是,你所应用的提示是在现在的场景中基于现有的环境下,相对是一个好的方式,不能确保你所给予的提示永久有效,并且随着时间推移,数据量的变更,你所加的提示可能成为噩梦。所以没有充分的把握不要轻易使用提示。

    下面说一说option (querytraceon 8649) 开启强制并行,个人认为这个提示真心是个好东西(2005不支持),sql优化器经常会让一个开销较大的语句使用串行(稍后发文),这个时候当你加上option (querytraceon 8649) 会吓你一跳 30秒变2秒?

    下面作个例子说明一下: 

     串行计划

    

    并行计划

    

    时间缩短了将近一半(本机配置可怜...在一台好的服务器效果会更明显)

    我这可怜的配置

    

    

    

    资源使用情况就不贴图了,具体的并行执行原理请参见大神 指尖流淌的博客

    http://www.cnblogs.com/zhijianliutang/p/4149850.html

    

    我们继续...这相当于消耗更多的资源来换取时间,但相对与要求反应更快的今天来说无疑是必要的选择。

    那么为什么SQL优化器生成一个串行计划,而不是“明显更好的”并行计划,总有一个原因。配置设置被设置为一个最大程度的并行(前面的maxdop 1),或者只有一个逻辑处理器可用的SQL服务器,或并行抑制操作,基数估计错误,成本核算模型的局限性。

    抛开其他因素我们来说一下因为语句写法而造成的优化器不能选择并行计划,大致一下几点:

  • 修改表变量操作(查询是可以的)
  • 使用标量函数 (这个是最常见查询不能开启并行的原因)
  • CLR执行数据访问的标量函数。
  • 随机的内在功能,如:object_name,encyptbycert等。
  • 使用系统表,如:sys.tables。

    

    还有一些功能是不能并行完成的,举几个常用情况如:

  • top
  • row_number
  • 多语句表值函数。
  • 递归CTE

    提到并行就一定要提一下maxdop了,调整好这个参数也是很必要的,不一定是越大越好哟~ 等待类型CXPACKET很大程度上是因为过度并行导致的等待。

    另外有个疑问希望大神们帮我解答union all的时候真的没法并行执行么 ,当然指的是union的每个部分一起执行,然后合并结果。

    曾经看到这个就傻傻的以为可以并行了...其实只是union的每个语句并行而已...

    

    

SQL提示介绍-强制并行的更多相关文章

  1. SQL 提示介绍 hash/merge/concat union

    查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...

  2. SQL Server-聚焦强制索引查询条件和Columnstore Index(九)

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

  3. pl/sql的介绍

    为什么需要pl/sql编程? 因为使用纯的sql语句来操作数据库,有先天性的技术缺陷: 1.不能模块编程: 2.执行速度慢: 3.安全性有问题: 4.浪费带宽. pl/sql是什么? pl/sql(p ...

  4. SQL的介绍及MySQL的安装

    基础篇 - SQL 介绍及 MySQL 安装               SQL的介绍及MySQL的安装 课程介绍 本课程为实验楼提供的 MySQL 实验教程,所有的步骤都在实验楼在线实验环境中完成, ...

  5. oracle PL/SQL的介绍

    转自:http://blog.sina.com.cn/s/blog_4c302f060101i4o1.html 一 PL/SQL的介绍 1 PL/SQL是什么? PL/SQL(procedural l ...

  6. SQL Server-聚焦强制索引查询条件和Columnstore Index

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

  7. .NET并行编程实践(一:.NET并行计算基本介绍、并行循环使用模式)

    阅读目录: 1.开篇介绍 2.NET并行计算基本介绍 3.并行循环使用模式 3.1并行For循环 3.2并行ForEach循环 3.3并行LINQ(PLINQ) 1]开篇介绍 最近这几天在捣鼓并行计算 ...

  8. 初学者SQL语句介绍

    初学者SQL语句介绍      1.用 Select 子句检索记录    Select 子句是每一个检索数据的查询核心.它告诉数据库引擎返回什么字段.    Select 子句的常见形式是:    S ...

  9. SQL Server里强制参数化的痛苦

    几天前,我写了篇SQL Server里简单参数化的痛苦.今天我想继续这个话题,谈下SQL Server里强制参数化(Forced Parameterization). 强制参数化(Forced Par ...

随机推荐

  1. 华硕U303L通过U盘装系统

    开机,按esc,进入bios,选择security,将secure boot control设置为disable.   在boot下,将launch csm 改为enable,按F10保存退出,重启. ...

  2. openSUSE 配置静态上网

    openSUSE静态固定IP设置方法 openSUSE号称最华丽的Linux,只是中文资料实在太少,这里提供在VMmware Workstation 7.12中安装openSUSE 11.3设置静态固 ...

  3. 类Collections的静态方法

    类Collections的静态方法 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成. 排序 static <T extends Comparable& ...

  4. js之数据类型

    1.数组类型 var Array=new Array(); 长度可变 var Array=new Array(n); 长度为n的数组 var Array=new Array("A" ...

  5. JSNO

    JSON 编辑 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...

  6. Unity3D将来时:WebGL

    作者:小玉链接:https://zhuanlan.zhihu.com/p/19974794来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 随着Unity5.0的发布,W ...

  7. WebView cookie 管理

    在Android应用程序中经常会加载一个WebView页,如果需要客户端向WebView传递信息,比如Cookie,也是可以的. 需要应用程序先将Cookie注入进去,打开该网页时,WebView会将 ...

  8. 手拼SQL小技巧,WHERE 1=1

    由于项目要求,要手动拼接SQL,(不知道领导们怎么想的--),然后就再次回到原始时代,append(SQL). 但后面查询牵扯到动态多条件,如果是mybatis的话就直接 可以用<if>标 ...

  9. 无法打开注册表项 unknown 没有足够的权限访问

    secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose 执行完,重新安装即可.

  10. SpringMVC常用注解實例詳解1:@Controller,@RequestMapping,@RequestParam,@PathVariable

    我的開發環境 框架:        springmvc+spring+freemarker 開發工具: springsource-tool-suite-2.9.0 JDK版本: 1.6.0_29 to ...