数据库于周日被重启了,刚好看看优化后的效果,顺便再找找新的需要优化的SQL
刚好找到了类似的几条语句,如下
select * from tableA where id not in (select id from tableB)
从执行时间20秒~70秒不等。
开始分析
首先是否用上索引,两个id均是主键所以不存在索引问题
其次分析一下索引,发现这两个id虽然是主键,但却不是聚集索引,而且id是通过newid()生成的完全无序的,因此这两个表在索引上可以说毫无用处,因为完全都是无序的。
换个思路,如果这两个id都是排序的,而且记录数也都不算少,再进行关联是不是会很快呢?还好SQLServer提供了Merge Join的hint提示,试试看吧
select * from tableA where id not in (select id from tableB) OPTION (MERGE JOIN);
执行后出现以下错误:
消息 8622,级别 16,状态 1,第 1 行
由于此查询中定义了提示,查询处理器未能生成查询计划。请重新提交查询,并且不要在查询中指定任何提示,也不要使用 SET FORCEPLAN。
查了以下相关文档,也就是说该语句不支持OPTION (MERGE JOIN);
那么换成not exists再试一下,看看效果是否会好一些
select * from tableA where not exists(select 1 from tableB where tableA.id=tableb.id)
通过测试后,发现稍微速度提高了一点点
最后再添加上OPTION (MERGE JOIN),试试看,居然变成了0秒
select * from tableA where not exists(select 1 from tableB where tableA.id=tableb.id) OPTION (MERGE JOIN);
调优大获成功,呵呵。

总结:
不是所有相关表都一定要建索引(或者聚合索引),以后可以多试试SQLServer的查询提示。

SQLServer性能优化之查询提示相关推荐

  1. 做好DBA,做好SQLServer性能优化

    怎样查出SQLServer的性能瓶颈 --王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url] --原帖地址 如果你曾经做了很长时间的DBA,那么你会了解到S ...

  2. mysql性能优化-慢查询分析、优化索引和配置

    目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_con ...

  3. mongodb聚合查询优化_【MongoDB】MongoDB 性能优化 - BI查询聚合

    最全的Java后端知识体系每天更新中.... 在BI服务中通过查询聚合语句分析定位慢查询/聚合分析,小结如下: 慢查询定位: 通过Profile分析慢查询 对于查询优化: 通过添加相应索引提升查询速度 ...

  4. sqlserver 性能优化思路

    通常我们会依照下面的顺序进行分析: 硬件能力 系统规模 数据库内部因素 软件环境 顺序可以有所调整或者交换,但是系统的性能优化一定要从全局出发.切勿一来就深入到某一个SQL语句的优化.可能你花费大量的 ...

  5. mysql sqlserver 性能优化_SQLServer性能优化之---数据库级日记监控

    4.6.6.SQLServer监控 PS:这些脚本都是我以前用SQLServer手写的,参考即可(现在用MySQL,下次也整理一下) 之前写SQLServer监控系列文章因为换环境断篇了,只是简单演示 ...

  6. 真是环境下阿里云RDS实例mysql性能优化-慢查询分析、优化索引和配置

    1.实战线上数据服务器参数: 数据库类型:MySQL 5.6 : CPU:10核: 数据库内存:12000MB: 最大IOPS:100000: 最大连接数:2000: 存储空间:共200.00G,数据 ...

  7. mysql sqlserver 性能优化_SQLSERVER SQL性能优化技巧

    1.选择最有效率的表名顺序(只在基于规则的优化器中有效) SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最 ...

  8. 关于Net开发中一些SQLServer性能优化的建议

    一. ExecuteNonQuery和ExecuteScalar 对数据的更新不需要返回结果集,建议使用ExecuteNonQuery.由于不返回结果集可省掉网络数据传输.它仅仅返回受影响的行数.如果 ...

  9. oracle子查询不减少数据,Oracle性能优化-子查询到特殊问题

    编辑手记:前面我们介绍常用的子查询优化方法,但总有一些情况时在规律之外.谨慎处理方能不掉坑. 前文回顾: 作者简介:韩锋 精通包括Oracle.MySQL.informix等多种关系型数据库,有丰富的 ...

最新文章

  1. 看看那些不讲码德的坏习惯
  2. 基于ESP8266 WiFi控制的步进升降机械平台
  3. 没有传说,也没有神话,我只相信我自己
  4. CSS3学习笔记1:结构性伪类选择器
  5. 获取手机idfa_七麦线上公开课:后IDFA时代,链接用户的新生态解决方案
  6. 高精度模板(含加减乘除四则运算)
  7. Asp.Net Core 通过中间件防止图片盗链
  8. des java c_这个des加密,到底是用的哪种类型?
  9. 天,又有人找我帮忙!
  10. server sql 数据c盘迁移d盘_C盘空间不足怎么办?如何给C盘扩容?
  11. mysql查询当前时间和用户_MySQL学习笔记(3) - 查询服务器版本,当前时间,当前用户...
  12. winform 项目获取app.config 中appSettings节点数据
  13. 批量给hive的表加分区
  14. 好好编程-物流项目08【整合静态资源文件】
  15. python中iter是什么意思_iter的用途是什么?
  16. python strftime时分秒_python如何把秒换成时分秒
  17. 什么是DBMS,DB,DBMS?
  18. STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例)
  19. 马思洛需求理论与市场营销究竟是什么关系
  20. 白月光与朱砂痣用计算机怎么弹奏,天谕白月光与朱砂痣钢琴谱 乐谱代码怎么使用...

热门文章

  1. ds18b20温度传感器 lcd C语言,C程序控制18B20测温及LCD显示源码打包
  2. 如何正确运用计算机,如何正确使用电脑
  3. vue/cli 3.0 与 2.0脚手架怎样mock数据
  4. linux提取字符串特定结果
  5. Object.create()方法
  6. 老旧计算机升级云桌面,哇哦!PC机房轻松升级云课堂 ,PC利旧方案看我的!
  7. Java百度网盘创建链接,java获取百度网盘真实下载链接的方法
  8. autojs怎么post协议_autojs QQ群post签到(五)
  9. 进制转换(sdut1252)_JAVA
  10. 二叉树的层序遍历 使用队列和不使用队列