优化引擎判断有误

        数据库版本:SQL Server 2008R2.

        前几天在审计的时候发现一个数据库的压力稍高,理论山现有的访问压力不应该使服务器压力达到这样的高度。在优化过程中发现,一类百万量级表上的查询无法使用到索引。显示的执行计划如下,很明显,SQL 执行过慢是因为全部走了主键查找。

     

 

  统计信息显示如下:

  表 'AccountCallbackInfo_4'。扫描计数 1,逻辑读取 4584855 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
  奇怪的是该表上建的有该SQL 查询条件所要使用的索引,但是查询优化器并没有使用到,难道是查询优化器判断有误。

  在查询的时候强制使用索引试下。

select top 100 id from Table  with(nolock,index(ix_AccountCallbackInfo_DONotDelete))  where  TradingServiceType = 1 and  NextCallbackTime<='2011-11-07 00:01:46' and  CallBackOperationType =4 and    CallbackStatus = 0 order by CreatedDate ASC
这次的统计信息如下。

(100 行受影响)
表 Table。扫描计数 2,逻辑读取 622 次,物理读取 0 次,预读 6 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)

 SQL Server 执行时间:
   CPU 时间 = 1298 毫秒,占用时间 = 186 毫秒。
SQL Server 分析和编译时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

 

可以看到两次的IO量级差了5个量级。查询时间上也差了很多倍。

---有时间需要研究下优化引擎怎么使用统计信息的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值