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中指定的执行计划。
最新文章
- HTML页面跳转的5种方法
- [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
- JQuery------判断拥有某个class或id的div是否存在
- HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)
- NWR协议
- Netty4.x中文教程系列(一) 目录及概述
- 如何签名apk,并让baidu地图正常显示
- 201521123103 《Java学习笔记》 第八周学习总结
- 文本处理工具(grep)
- java根据模板导出pdf
- 【一天一道LeetCode】#99. Recover Binary Search Tree
- 用python一步一步教你玩微信小程序【跳一跳】
- learn-ES6基础语法1-let&;const
- php中文语义分析
- http协议基础(四)http状态码
- 用MVC5+EF6+WebApi 做一个考试功能(五) 前端主题
- multi-mechanize error: can not find test script: v_user.py问题
- keepalived 高可用(IP飘移)
- 【面试总结-编程】多行两列数据,实现同key的value求和并输出
- 多对多 hibernate映射
热门文章
- HDU 4557 Tree(可持久化字典树 + LCA)
- JavaScript知识点整理
- sprinf sprintf_s 的用法
- R工具包一网打尽
- Java——HashMap
- 30秒了解Excel的前世今生
- 学习笔记57—归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
- poi实现百万级数据导出
- Codeforces 1053 B - Vasya and Good Sequences
- LeetCode--008--字符串转换整数 (atoi)(java)