一些联合表查询语句,这些表里都建立有索引。
在没有加 option ( force order ) 前,整个查询费时40多秒,但 单独表 查询基本不到1秒。
查看查询计划后发现查询过程是从table n开始使用索引与 table s 等匹配,再与table m中的b匹配,导致整个查询最多表的扫描次数上千次多,逻辑读上万次。
加了 option ( force order ) 后,最多表查询扫描次数在10次以内,逻辑读最多的也就千出头。
整个查询费时不到1秒,CPU运行占用时间599MS。
分享一下。

以下是详细解释:

OPTION 子句用于指定在整个查询过程中的查询提示(Query Hint)。通常,用户不必使用OPTION 子句,因为查询优化器会自动选择一个最佳的查询计划。OPTION 子句必须由最外层的主查询来指定。各查询提示之间应使用逗号隔开。其语法如下: 
OPTION (<query_hint> [,...n] )
<query_hint> ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| FAST number_rows
| FORCE ORDER
| MAXDOP number
| ROBUST PLAN
| KEEP PLAN
| KEEPFIXED PLAN
| EXPAND VIEWS
}
各参数说明如下: 
{HASH | ORDER} GROUP
指定在GROUP BY 或COMPUTE 子句中指定的查询使用散列法或排序法。所谓散列法是指为存储和检索数据项或数据,把搜索关键字转换为一个地址的一种方法。该方法常作为数据集内的记录的一种算法,可以使记录分组均匀,减少搜索时间。 
{MERGE | HASH | CONCAT} UNION
指定所有的UNION 操作符采用合并(Merge)、散列(Hash) 或连接(Concatenate)的方法执行操作。如果指定了多个UNION 提示,查询优化器会挑选一个最佳的提示方案。 
{LOOP | MERGE | HASH |} JOIN
指定查询过程中的所有连接操作采取循环连接(Loop Join)、合并连接(Merge Join)或散列连接(Hash Join) 的方法。如果指定了多个JOIN 提示,查询优化器会挑选一个最佳的提示方案。 
FAST number_rows

指定查询优化只用于迅速返回前number_rows 行数据,在number_rows 行以后的数据采用原查询方法。 
FORCE ORDER
指定在查询语法中说明的连接顺序在查询优化的过程中保持不变。 
MAXDOP number
忽略由Sp_configure 设定的针对查询的最大并行线程数目。 
ROBUST PLAN
强制查询优化器尝试使用最大行容量的计划。 
KEEP PLAN
强制查询优化器放松重新编译查询的阈值。指定此选项可以让一个表被多次更新而不必频繁地重新编译查询。 
KEEPFIXED PLAN
强制查询优化器不重新编译查询。这样只有当表的概要改变或执行Sp_recompile 存储过程时,才会重新编译查询。 
EXPAND VIEWS
扩展索引化视图(当一个视图的名称在查询文本中被视图定义替换时称这个视图被扩展了),并且查询优化器不再将索引化视图作为查询的某部分的替代品。如果视图使用了WITH (NOEXPAND) 说明,则不能被扩展。

转载于:https://www.cnblogs.com/Fly-sky/p/5622421.html

MSSQL OPTION语句详解相关推荐

  1. 视图with check option语句详解

    此文是记录数据库平常的学习遇见的一些知识点 视图WITH CHECK OPTION子句 - 引用mysql官方文档的一句话:可以为可更新视图指定 WITH CHECK OPTION 子句, 以防止插入 ...

  2. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  3. mysql explain语句_Mysql explain 语句详解

    explain 语句详解 explain 写在 select 前,如下 mysql> explain select * from user_info where id = 2\G ******* ...

  4. Java教程:Java continue语句详解

    Java教程有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break ...

  5. smarty手册-smarty中foreach循环语句详解

    原文地址:smarty手册-smarty中foreach循环语句详解作者:谭博 {foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其 ...

  6. 教妹学Java(十四):switch 语句详解

    大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.本篇文章通过我和三妹对话的形式来谈一谈"switch 语句". 教妹学 Java,没见过这么有趣的标题吧?&q ...

  7. MySQL数据库增删改查常用语句详解

    MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...

  8. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  9. mysql的load data_【MySQL】load data语句详解(一)

    作者  罗小波 沃趣科技高级MySQL数据库工程师 load data语句详解 背景 数据库版本:MySQL 5.7.18 服务器信息:本地到处导入在10.10.30.241上演示,local远程导入 ...

最新文章

  1. cstring 比较_不同商用齿轮齿接触分析软件的比较(三)
  2. 5-5 表格输出 (5分)
  3. 大牛深入浅出讲解C语言#define宏定义应用及使用方法
  4. 航旅事业群面试(li)
  5. Hibernate之HQL检索(查询)方式
  6. QT+SQLite 判断表中是否含有指定字段
  7. 字节3-1前端面试官自学Vue的正确姿势
  8. oracle里面如何查询sqlid,Oracle SQL查询:如何使用count
  9. 根据线性递推的DP公式如何写出变换矩阵
  10. 共合网,风投的概念和阳谋
  11. 剑指offer面试题21. 调整数组顺序使奇数位于偶数前面(双指针)
  12. postman - github下载地址
  13. MySQL数据库入门学习
  14. NSIS 安装VS2008运行时
  15. Linux系统查看当前时间的命令
  16. 格式工厂 wav 比特率_这可能是 Mac 上最强格式转换工具
  17. 「Go工具箱」web中想做到cookie值安全?securecookie库的使用和实现原理
  18. java面向对象笔记
  19. 问题 B: PIPI发工资(拓扑排序遍历)
  20. python彩虹图_python绘制彩虹图教程

热门文章

  1. eclipse各个版本下载
  2. 利用for循环打印出不同的三角形
  3. 模型有锯齿_小雕课堂 | 最好的抗锯齿,画质保留提升帧数
  4. 阿里巴巴在内蒙古旱区试水物联网灌溉技术,一年省出1.5个西湖 1
  5. docker集群部署:第3部分:服务
  6. java中写sql语句的小小细节
  7. SxsTrace工具用法
  8. linux系统软Raid高可用配置
  9. 微信小程序srt_微信小程序微商城(八):缓存实现商品购物车功能
  10. 【汇编优化】之CPUID获取x86处理器信息