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调优的问题,说性能太差,希望我能给调优下,最近有些懒,可能和最近太忙有关系,本来打算问问现在的情况,如果差不多就不调了,那哥们儿 ...
随机推荐
- JMeter 生成精度度为分钟的时间戳文件名
import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import java.text.Simple ...
- Spring中JdbcTemplate使用RowMapper
package com.cxl.demo.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util. ...
- Tp5.1使用导出Excel
composer require phpoffice/phpexcel 不管它的警告,都能用的. use PHPExcel; use PHPExcel_IOFactory; public static ...
- Django 国际化和本地化
所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...
- leecode第七十八题(子集)
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vect ...
- anaconda3 安装opencv3.4.2 cuda9.2 mint19(ubuntu 18.04)
从opencv1的时代,编译这玩意就不是太轻松.之前都是在win下.2.x时代,开始用cmake GUI,选vs版本,x86 x64 各种依赖库选项,debug release,... 现在3.4了, ...
- docker下debian镜像开启ssh, 允许root用密码登录
用的官方python镜像做开发, 暴露端口, 用pycharm ssh进去开发. 忽然发现本来ssh能连上, 但是更了新的python镜像连不上了. 有折腾了一下, 连上了. 主要是python官网镜 ...
- LeetCode--371--两整数之和
问题描述: 方法: class Solution(object): def getSum(self, a, b): """ :type a: int :type b: i ...
- hadoop挂载多硬盘,ZZ-- multiple disks per node
hadoop挂载多硬盘 ...multiple disks per node multiple disks per node Read more at: http://www.queryhome.c ...
- android -------- 颜色的半透明效果配置
最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AA ...