MSSQL2012中SQL调优(SQL TUNING)时CBO支持和常用的hints
虽然当前各关系库CBO都已经非常先进和智能,但因为关系库理论和实现上的限制,CBO在特殊场景下也会给出次优甚至存在严重性能问题的执行计划,而这些场景中,有一部分只能或适合通过关系库提供的hints来进行干涉和解决。目前,所有三个商业数据库都提供了一定数目的hints,虽然具体使用语法或形式有所差别,但本质都是一样的,那就是指示数据库CBO给出更合理、更高效的执行计划选择。MSSQL作为商业库之一,hints功能当然不会少,下面,对MSSQL中支持和常用的hints做简单介绍。
1.{HASH | ORDER} GROUP
1)语法:select ... from ... option({HASH | ORDER} GROUP);
2)用途:对行源数据进行group by或distinct操作时,指示CBO选择HASH或ORDER物理操作。这些物理操作分别和Oracle中的集合操作hash group by和hash unique或sort group by和sort unqiue相对应。
2.{MERGE | HAHASH | CONCATAT} UNION
1)语法:select ... from ... option({MERGE | HAHASH | CONCATAT} UNION);
2)用途:对行源数据进行union操作时,指示CBO选择MERGE、HASH或CONCAT三种物理操作之一来实现。这些物理操作分别和Oracle中的集合合并操作union all或concatenation相对应。
3.FORCE ORDER
1)语法:select .... from ... option(FORCE ORDER);
2)用途:对多个表进行连接操作时,指示CBO选择表间连接的顺序。该hint与Oracle中的leading或ordered等hints相对应。
4.{LOOP | MERGE | HASH} JOIN
1)语法:select ... from ... option({LOOP | MERGE | HASH} JOIN);
2)用途:对多个表进行连接操作时,指示CBO选择表间连接的连接方法。该hint与Oracle中的use_nl,use_hash和use_merge等hints相对应。
5.INDEX=<indexname> | <indexid>
1)语法:select ... from ... option(INDEX=<indexname> | <indexid>);
2)用途:对数据进行访问时,指示CBO选择特定索引对数据进行访问。该hint与Oracle中的use_index hint相对应。
6.FORCESEEK
1)语法:select ... from ... option(FORCESEEK);
2)用途:通过索引对数据进行访问时,指示CBO选择通过SEEK方式访问索引,而不是SCAN。
7.FAST <number_rows>
1)语法:select ... from ... option(FAST <number_rows>);
2)用途:CBO编译SQL语句时,指示CBO选择适合返回指定行数的最优执行计划。该hint与Oracle中的firstrows(n) hint相对应。
8.MAXDOP <N>
1)语法:select ... from ... option(MAXDOP <N>);
2)用途:CBO编译SQL语句时,指示CBO生成执行计划的并行度。该hint与Oracle中的parallel hint相对应。
9.OPTIMIZE FOR
1)语法:select ... from ... option(OPTIMIZE FOR);
2)用途:CBO编译SQL语句时,向CBO传入SQL语句中相应变量的值,以便CBO根据该传入的具体值为SQL语句生成最优的执行计划。
10.PARAMETEETERIZATATION {SIMPLE | FORCED}
1)语法:select ... from ... option(PARAMETEETERIZATATION {SIMPLE | FORCED});
2)用途:CBO编译SQL语句时,该hint将相关SQL文本中相关值替换为变量,以减少系统中SQL硬解析的次数,这有点类似Oracle中的绑定变量及cursor_sharing参数的作用。
11.NOEXPAND
1)语法:select ... from ... option(NOEXPAND);
2)用途:CBO编译SQL语句时,指示CBO不展开视图并使用已有索引视图。
12.USE PLAN
1)语法:select ... from ... option(USE PLAN);
2)用途:CBO编译SQL语句时,指示CBO为SQL语句生成该hint中指定的执行计划。
MSSQL2012中SQL调优(SQL TUNING)时CBO支持和常用的hints的更多相关文章
- SQL注入漏洞和SQL调优SQL注入漏洞和SQL调优
SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这 ...
- 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
前几天,一个用户找到我,说查一个小表的时候非常慢,我问有多慢,他说最快也得半个小时才能出结果,有时干脆不出结果,我说小表多大,他说就几十兆,有点疑惑,让他帮忙获取了相关信息,一看就明白了,原来所谓的小 ...
- Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全
该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...
- 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)
继<高性能SQL调优精要与案例解析>一书谈SQL调优(SQL TUNING或SQL优化),我们今天就谈谈各主流关系库中,占据SQL调优技术和工作半壁江山的.最重要的核心机制之一——索引(i ...
- 《高性能SQL调优精要与案例解析》一书谈SQL调优(SQL TUNING或SQL优化)学习
<高性能SQL调优精要与案例解析>一书上市发售以来,很多热心读者就该书内容及一些具体问题提出了疑问,因读者众多外加本人日常工作的繁忙 ,在这里就SQL调优学习进行讨论并对热点问题统一作答. ...
- 11g新特性-自动sql调优(Automatic SQL Tuning)
11g新特性-自动sql调优(Automatic SQL Tuning) 在Oracle 10g中,引进了自动sql调优特性.此外,ADDM也会监控捕获高负载的sql语句. 在Oracle 11g中, ...
- 初次使用SQL调优建议工具--SQL Tuning Advisor
在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning Advisor :STA),它是新的DBMS_SQLTUNE包. 使用STA一定要保证优化器是CBO模式下 ...
- 你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?
前言 过年回来的第二周了,终于有时间继续总结知识了.这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等. 像本文标题中的两个问题,就是我在实际面试过程 ...
- 记一次SQL调优/优化(SQL tuning)——性能大幅提升千倍以上
好久不写东西了,一直忙于各种杂事儿,恰巧昨天有个用户研发问到我一个SQL调优的问题,说性能太差,希望我能给调优下,最近有些懒,可能和最近太忙有关系,本来打算问问现在的情况,如果差不多就不调了,那哥们儿 ...
随机推荐
- MySQL like用法
MySQL LIKE 语法 LIKE运算符用于WHERE表达式中,以搜索匹配字段中的指定内容,语法如下: WHERE column LIKE pattern WHERE column NOT LIKE ...
- (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
(总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL PS:这个是懒人yum快速安装法,用于开发和测试环境很方便,用于没有特殊要求的生产环境也可以.特 ...
- 函数indexOf()和lastIndexOf()
返回前面起第一个字符的位置indexOf(“字符”); 它是从前面开始数(从左边开始数),而且只找第一个,然后返回该字符的位置,索引号都是从0开始的.返回的是个数值. var txt = “abcde ...
- java扫描文件夹下面的所有文件(递归与非递归实现)
java中扫描指定文件夹下面的所有文件扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件.递归方式非递归方式(采用队列或者栈实 ...
- Spring 的@Required注释
本例子源于:W3Cschool,在此做一个记录 @Required注释为为了保证所对应的属性必须被设置,@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean ...
- git 放弃本地修改
本文以转移至本人的个人博客,请多多关注! 如果在修改时发现修改错误,而要放弃本地修改时, 一, 未使用 git add 缓存代码时. 可以使用 git checkout -- filepathnam ...
- 在cmd中登录MySQL数据库
mysql -uroot -p 输入密码,即可
- Tomcat部署项目定时任务跑了两次
在server.xml下面找到Host这行代码 <Host name="localhost" appBase="webapps" unpackWARs=& ...
- ionic日历插件
1:引入插件的两个文件 timePicker.js 和timePicker.css文件 2:填加插件模块到项目模块中CorderYuan->app.js的moudule 3:在 ...
- react点滴
1.<SubSubComp {...this.props } /> 传递属性,{...props}的方式为组件传递了这两个属性,这就是JSX中的延展属性,"..."成为 ...