虽然当前各关系库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中指定的执行计划。

最新文章

  1. HTML页面跳转的5种方法
  2. [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
  3. JQuery------判断拥有某个class或id的div是否存在
  4. HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)
  5. NWR协议
  6. Netty4.x中文教程系列(一) 目录及概述
  7. 如何签名apk,并让baidu地图正常显示
  8. 201521123103 《Java学习笔记》 第八周学习总结
  9. 文本处理工具(grep)
  10. java根据模板导出pdf
  11. 【一天一道LeetCode】#99. Recover Binary Search Tree
  12. 用python一步一步教你玩微信小程序【跳一跳】
  13. learn-ES6基础语法1-let&amp;const
  14. php中文语义分析
  15. http协议基础(四)http状态码
  16. 用MVC5+EF6+WebApi 做一个考试功能(五) 前端主题
  17. multi-mechanize error: can not find test script: v_user.py问题
  18. keepalived 高可用(IP飘移)
  19. 【面试总结-编程】多行两列数据,实现同key的value求和并输出
  20. 多对多 hibernate映射

热门文章

  1. HDU 4557 Tree(可持久化字典树 + LCA)
  2. JavaScript知识点整理
  3. sprinf sprintf_s 的用法
  4. R工具包一网打尽
  5. Java——HashMap
  6. 30秒了解Excel的前世今生
  7. 学习笔记57—归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
  8. poi实现百万级数据导出
  9. Codeforces 1053 B - Vasya and Good Sequences
  10. LeetCode--008--字符串转换整数 (atoi)(java)