• 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中指定的执行计划。

  • 相关阅读:
    招聘 微软全球技术支持中心 sql server组
    retrofit2 上传图片
    android 6.0权限判断 音频 拍照 相册
    android studio 修改成自己jks(keystore)签名文件
    android 透明度颜色值
    android studio clone 失败
    fresco Bitmap too large to be uploaded into a texture
    android 虚线
    EventBus 3.0使用
    java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
  • 原文地址:https://www.cnblogs.com/lhdz_bj/p/9168504.html
Copyright © 2020-2023  润新知