博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个 Sql语句优化的问题- STATISTICS 统计信息
阅读量:6284 次
发布时间:2019-06-22

本文共 823 字,大约阅读时间需要 2 分钟。

  前段时间,同事遇到一个 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

转载地址:http://xwhva.baihongyu.com/

你可能感兴趣的文章
开发人员学Linux(12):CentOS7安装配置Memcached和Redis
查看>>
读取access日志文件并解析url encode内容
查看>>
再看GOPATH
查看>>
Android实用笔记——使用WebView在界面中显示网页
查看>>
Maven 更换国内镜像 飞一般的感觉
查看>>
netty handler的执行顺序(2)
查看>>
spring cloud 微服务实战开篇
查看>>
WebMagic的设计思想
查看>>
该死的Word——修复Doc文档的灵异错误
查看>>
写给 Node.js 学徒的 7 个建议
查看>>
FreeSWITCH折腾笔记6——科大讯飞TTS合成lua脚本
查看>>
一分耕耘一分收获
查看>>
centos 7版本防火墙详细说明
查看>>
工作中的细节和收获
查看>>
shell+awk web报表
查看>>
(9)强大的OGNL
查看>>
Spring实战笔记:Web中的Spring
查看>>
变味了的微笑
查看>>
微信公众平台开发 账号快速申请
查看>>
说说这篇「我为什么从 Python 转向 go」
查看>>