最近做的项目快上线了,在做了一次压力测试后发现了不少问题,基本都是因为数据量达到一定级别时(预测系统上线10年后的数据量)SQL查询超时,其中有些是因为索引缺失、有些是因为写法不好,这些在有经验的人眼里一眼就能看出问题,于是我解决起来都很快。

  但其中有一个无比诡异,SQL很简单,但执行起来都超过1分钟,而我们的理想目标是1秒,差距很大。

  先简单写下这个SQL的样子:

SELECT TOP 10
T1.C1, T1.C2, T1.C3
FROM TABLE_1 T1
JOIN TABLE_2 T2
ON T1.C1 = T2.C1
WHERE
T2.C2 NOT IN ('V1', 'V2', 'V3')

  首先看到这么简单,速度慢的问题比较容易出现在NOT IN,这个不能索引速度很慢,但需求上的原因,要么我们换其他方式实现NOT IN,耗费时间去设计重构,但当天就要发版本时间不允许。SQL就这么简单,索引都OK,问题出在哪里呢?

  就不拐弯抹角了,我尝试去掉了TOP 10,奇迹出现了,执行1秒都不要就完成了!TOP 10?尼肿么辣!!

  问题找到了,原因还不明,立刻想解决方案,第一顺位想到的就是不做TOP 10都取出来程序在内存处理TOP 10,当然这个方案很让人不爽!

  第二就是网上找找资料,发现一个帖子说TOP有时候会影响SQL的优化计划芸芸,这个应该就是原因了,但用执行计划分析器却没有发现什么异常,只能说诡异。

  然后我尝试使用“SQL SERVER 强制执行计划”关键字搜索,看到一篇文章,内容不是我想要的,但我看到一个SQL的关键字OPTION(FORCE ORDER),看到Force这个词我觉得可能是我要找的东西,于是我把这句设置加到了我的SQL最后面,终于,执行速度变为了不到1秒,但原理还没有弄的一清二楚,就先用这个吧,加一句话解决了紧急的问题,非常开心,有空再来研究这个是什么原理,周末的同事有教过SQL的都没见过这种用法。

记SQL SERVER一次诡异的优化的更多相关文章

  1. SQL Server 2016 查询存储性能优化小结

    SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...

  2. Sql Server CPU 性能排查及优化的相关 Sql

    Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...

  3. SQL优化工具 - SQL Server Profiler与数据库引擎优化顾问

    最近项目做到几千个学生分别去人脸识别记录(目前约630000行)中查询最后一次记录,可想而知性能这块是个麻烦.于是乎,GET到了SQL Server Profiler和数据库引擎优化顾问这俩工SHEN ...

  4. SQL Server提高事务复制效率优化(一)总体概述

      随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...

  5. 降龙十八掌之一:(亢龙有悔)SQL Server Profiler和数据库引擎优化顾问

    简介 说到Sql的[性能工具]真是强大,SQL Server Profiler的中文意思是SQL Server事件探查,这个到底是做什么用的呢?我们都知道探查的意思大多是和监视有关,其实这个SQL S ...

  6. SQL Server 索引基本概念与优化

    数据页和区 页 SQL Server 中的数据以“页”(Page)的形式保存数据,页是SQL Server 的IO单位,读/写一次至少是一页.一页为8K(8192byte). 页由三部分组成,页头,数 ...

  7. (4.13)SQL Server profile使用、数据库优化引擎顾问使用

    SQL Server profile使用技巧 介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自从转mysql我自己也差不多2年没有使用profile,忽然prof ...

  8. SQL Server集成服务最佳实践:语句优化

        SQL Server集成服务(SQL Server Integration Services,SSIS)在其前辈DTS(Data Transformation Services,数据转换服务) ...

  9. SQL Server Profiler和数据库引擎优化顾问

    原文:SQL Server Profiler和数据库引擎优化顾问  简介 说到Sql的[性能工具]真是强大,SQL Server Profiler的中文意思是SQL Server事件探查,这个到底 ...

随机推荐

  1. Compensating Transaction Pattern(事务修正模式)

    Undo the work performed by a series of steps, which together define an eventually consistent operati ...

  2. 在DirectShow中支持DXVA 2.0(Supporting DXVA 2.0 in DirectShow)

    这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.并准备记录一下用ffmpeg实现dxva2,将在第三篇写到.这是第二篇.,英文原址:https://msdn.microso ...

  3. thinkphp学习简易教程(二) thinkphp连接读取MySQL数据库

    首先, 在本地服务器中新建项目APP,依据第一讲中的步骤配置好thinkphp,这里为了测试方便,不分前台和后台模块,统一把模块路径设为'./APP/'. 1.新建数据库myapp,以及数据库表thi ...

  4. ABP之Javascript生成

    还是服务 在调试SimpleTaskSystem的AngularJs demo时,一开始我只看到对服务的应用. app.controller(controllerId, [ '$scope', 'ab ...

  5. 15、ASP.NET MVC入门到精通——MVC-路由

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Routing(路由) – URL url 作为广泛使用的Web用户接口,需要被重视 好的Url应该满足如下条件: URL应为获取某种资源提 ...

  6. java web学习总结(十八) -------------------过滤器的高级使用

    在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...

  7. 去 IOE,MySQL 完胜 PostgreSQL

    本文转载自: http://www.innomysql.net/article/15612.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 前言 上周参加了2015年的中国数据库 ...

  8. 怎么使用jQuery

    jQuery的强大我何文启(个人主页:hovertree.com)就不用多说了,那么怎么使用jQuery呢? 首先,下载jquery.下载地址:http://hovertree.com/hvtart/ ...

  9. SharePoint 2013 图文开发系列之InfoPath入门

    本文主要介绍SharePoint 2013中,简单发布InfoPath表单,并添加后台代码,示例比较简单,主要描述的是一个创建InfoPath的过程,而非多么深奥的后台代码,希望能够给初学者带来帮助. ...

  10. Google C++单元测试框架---Gtest框架简介(译文)

    一.设置一个新的测试项目 在用google test写测试项目之前,需要先编译gtest到library库并将测试与其链接.我们为一些流行的构建系统提供了构建文件: msvc/ for Visual ...