前段时间,同事遇到一个 Sql语句的问题,一个列表分页功能响应在30 s以上,看数据库里面的数据条数,数据量也不大,相关字段的一些索引也都有,可就是慢。于是找出具体的sql 语句出来分析,分页功能主要有个sql 语句,select 查询和 count 两条语句。 select 查询字段的时候,速度挺快,执行时间在1 s以内 ,但是执行count(1)  的时候,速度巨慢,执行时间增加到10 s以上。奇怪的是count 语句为什么会比select 语句还慢呢。总之可以确定的就是count语句导致的。定位到具体的语句之后,查看具体的执行计划。发现select 语句的查询计划和count(1)的查询计划,有一些不同。

Select 语句 的执行计划

count(*)的查询计划

以为是索引的问题。于是往各个表里面都加上的相关的索引,情况依旧,于是判断可能不是索引的问题。

然后猜测是IO的问题。

于是在两条sql 前后 加上SET STATISTICS IO ON; 查看IO情况。

Select 语句的IO 输出

Count(1) 语句的IO 输出

对比后发现,ChannelBussinessInfo 这个表的逻辑读取,从2028次猛增到了631722 次,

估计就是ChannelBussinessInfo 这个表的问题,于是尝试着给这个表加了一些相关的索引,但是依然没有效果。

没有办法了,于是猜测是不是统计信息有问题,因为统计信息会影响 执行计划和io读取。

顺着这个思路,尝试着把ChannelBussinessInfo这个表统计信息更新了,

UPDATE STATISTICS ChannelBussinessInfo;

果然,sql 执行时间降低到1秒。IO 读取降到2028次。

关于UPDATE STATISTICS 的相关说明:

  http://technet.microsoft.com/zh-cn/ms187348

一个 Sql语句优化的问题- STATISTICS 统计信息的更多相关文章

  1. sql 语句优化

    sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索引,索引不合理 没有 ...

  2. 必须掌握的30种SQL语句优化

    1.’对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用 ...

  3. SQL Server2008优化之SET STATISTICS开关

    一.准备工作 缓存对于某个查询的性能影响十分之大,所以优化之前要清空缓存. 清除Buffer Pool时面的所有缓存 DBCC DROPCLEANBUFFERS清除Buffer Pool里的所有缓存的 ...

  4. SQL Server优化之SET STATISTICS开关(转载)

    一.准备工作 缓存对于某个查询的性能影响十分之大,所以优化之前要清空缓存. 清除Buffer Pool里面的所有缓存 DBCC DROPCLEANBUFFERS 清除Buffer Pool里的所有缓存 ...

  5. sql语句优化SQL Server

    MS   SQL   Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)          2.I/O吞吐量小,形成了 ...

  6. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  7. 整理:sql语句优化之SQL Server

    . 增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是MsSQL自动评估选择的.单个任务分解成多个任务,就可 以在处理器上运行.例如耽搁查询的排序.连接.扫描和 ...

  8. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  9. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

随机推荐

  1. Shell命令_正则表达式

    正则表达式是包含匹配,通配符是完全匹配 基础正则表达式 test.txt示例文件 1 2 3 4 5 6 7 8 9 10 11 12 Mr. James said: he was the hones ...

  2. EPUBBuilder编辑器新版

    epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eBook电子书标准,e ...

  3. Java追加文件内容的三种方法

    import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...

  4. 使用IDEA自带的rest client参数传递乱码问题

     在idea使用rest client(idea自带的访问请求地址工具)调试的时候,有时出现中文会乱码的情况    解决方法如下:   1.打开IDEA安装路径下的bin文件夹里面的idea64.ex ...

  5. 由多线程引起的map取值为null的分析

    昨天写了一个多线程的程序,却发现了一个很奇特的问题,就是我的map对象明明put了,可是get的时候竟然会取到null,而且尝试多次,有时候成功,有时候取到null,并不确定. 程序代码如下: pub ...

  6. AfNetworking 3.0源码解读

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  7. c# 百度api语音识别

    public static string getStrAccess(string para_API_key, string para_API_secret_key) { //方法参数说明: //par ...

  8. hadoop报错:WARN mapred.JobClient: Error reading task outputNo route to host

    解决方案: /etc/sysconfig/network/etc/hosts$hostname 这三处的主机名都要一样. 具体参考:http://blog.itpub.net/28254374/vie ...

  9. HTTP Status 500 - Servlet.init() for servlet springmvc threw exception

    自己的当前环境是ubuntu14.04 64位,tomtcat7和tomcat8,eclipse luna,然后跑了一直spring的demo项目爆了上述的错误,由于这个项目用的是spring3.2在 ...

  10. 【poj1733】 Parity game

    http://poj.org/problem?id=1733 (题目链接) 题意 一个由0,1组成的序列,每次给出一段区间的奇偶,问哪一条信息不合法. Solution 并查集. 题目中序列的长度有很 ...