首页 > 代码库 > 前段时间

前段时间

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

Select 语句 的执行计划

 

count(*)的查询计划

 

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

然后猜测是IO的问题。

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

 

Select 语句的IO 输出

 

Count(*) 语句的IO 输出

 

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

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

 

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

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

UPDATE STATISTICS ChannelBussinessInfo;

 

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