一个 Sql语句优化的问题- STATISTICS 统计信息
前段时间,同事遇到一个 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 统计信息的更多相关文章
- sql 语句优化
sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索引,索引不合理 没有 ...
- 必须掌握的30种SQL语句优化
1.’对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用 ...
- SQL Server2008优化之SET STATISTICS开关
一.准备工作 缓存对于某个查询的性能影响十分之大,所以优化之前要清空缓存. 清除Buffer Pool时面的所有缓存 DBCC DROPCLEANBUFFERS清除Buffer Pool里的所有缓存的 ...
- SQL Server优化之SET STATISTICS开关(转载)
一.准备工作 缓存对于某个查询的性能影响十分之大,所以优化之前要清空缓存. 清除Buffer Pool里面的所有缓存 DBCC DROPCLEANBUFFERS 清除Buffer Pool里的所有缓存 ...
- sql语句优化SQL Server
MS SQL Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- 整理:sql语句优化之SQL Server
. 增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是MsSQL自动评估选择的.单个任务分解成多个任务,就可 以在处理器上运行.例如耽搁查询的排序.连接.扫描和 ...
- 数据库 基于索引的SQL语句优化之降龙十八掌(转)
一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言 客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
随机推荐
- static 静态导包
静态导入 ArrayUtils 类的 INDEX_NOT_FOUND 属性和 add 方法 import static org.apache.commons.lang3.ArrayUtils.INDE ...
- quartz介绍
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...
- UITableView的常用属性和代理方法
以下是近期总结的关于tableView的一些属性和代理方法,以及一些常见的问题,现汇总如下,今后还会持续更新,请继续关注: tableView 的头部和尾部视图属性: UISwitch *foot ...
- static关键字总结
static,即静态声明.它在 作用域.存储方式.生命周期 等各方面影响一个变量或函数.文章将从 局部变量.全局变量.普通函数.类的static成员(包括数据成员与成员函数)来总结static. ...
- hibernate查询返回一个list ,Date类型追加数据
public Pagination getLookPage(BeanPatrolScheduling beanPatrolScheduling, int pageNo, int pageSize) { ...
- bzoj 3172 AC自动机
初学AC自动机,要先对于每一个模式串求出来trie树,在此基础上构建fail指针,然后在trie树加上失配边构建出整张trie图. AC自动机的原理和KMP差不多,一个节点的fail指针就是指向tri ...
- Java并发和多线程(一)基础知识
1.java线程状态 Java中的线程可以处于下列状态之一: NEW: 至今尚未启动的线程处于这种状态. RUNNABLE: 正在 Java 虚拟机中执行的线程处于这种状态. BLOCKED: 受阻塞 ...
- 【caffe】基本数据结构blob
@tags: caffe blob blob是caffe中的基本数据结构,简单理解就是一个"4维数组".但是,这个4维数组有什么意义? BTW,TensorFlow这款google ...
- 【poj3709】 K-Anonymous Sequence
http://poj.org/problem?id=3709 (题目链接) 题意 给出一个n个数的序列,要求将其中一些数改为另一个比它小的数,改动的花费为两数的绝对值,完成改动后使得整个序列中出现过的 ...
- Oracle AWR 数据导入/导出的步骤
LINUX状态下,连接oracle用户:su - oracle 1.上传采集快照.dmp文件至服务器 (dbid:4292035712) 919219826 2.在服务器端创建目录 (即文件夹a ...