zoukankan      html  css  js  c++  java
  • 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中指定的执行计划。

  • 相关阅读:
    scikit-learn机器学习(四)使用决策树做分类
    从最大似然到EM算法浅解
    scikit-learn机器学习(三)多项式回归(二阶,三阶,九阶)
    一个打印调试信息的样例
    AppFuse 3的乱码问题
    垂直和水平居中方法小结
    Hero In Maze
    Highmaps的天津地图数据JSON格式
    互联网公司面试中常常被问的问题
    MySQL(6)--复制,docker容器中
  • 原文地址:https://www.cnblogs.com/lhdz_bj/p/9168504.html
Copyright © 2011-2022 走看看