DBA的高手们请教下关于 dbcc freeproccache的问题,这个是不是清除SQL缓存的?现在的情况是这样,我的是sql server2005 最大的表里有500万的数据,查询速度非常的慢,我有在常用的字段上加索引,但还是很慢,昨天发现执行了这个后,查询速度变得飞快,请问这是啥原因,执行这个对数据库有没有负面影响?我是从sql 2000升级过来的,有执行过sp_updatestats,表的索引也重建了,但效果都不是很明显,用了这个后效果特明显,我可否将他设置成作业,每三小时自动执行?

解决方案 »

  1.   

    dbcc freeproccache 是清除内存中缓存的执行计划。
    一般是保留缓存的执行计划才会提高性能的吧。数据库查询慢,可能是sql server重用了错误的执行计划,
    执行dbcc freeproccache后,又生成的新的执行计划,这样可能快了
      

  2.   

    我觉得你的查询速度提高与dbcc freeproccache 似乎无关,按说 dbcc freeproccache不会提高速度吧
    我觉得你可以做分区表试试看。可以视情况(加with nolock) 。比如数据的重要性不高,可以移除部分数据。
      

  3.   

    回楼上的,with nolock我已经加了但速度没有明显提升,数据表已经分了,一个索引表,一个信息表,各500万,其中索引表有5个索引,之前加了有大概十个,但update效率明显降低,所以缩减到5个
      

  4.   

    现在有一个网页需要按行业显示每个行业信息数的数量,也就是说在同一个页面有30几个,Select count(id) from info_id with(nolock) where notsh=1 and flagz=1 and sortid=sortid
      

  5.   

    楼上的大师我已经用UPDATE STATISTICS info_id 重建过了,但没有明显效果!
      

  6.   

    若可能的话,做分区表试试。。是不是这个表查询的比较频繁呢?更新删除呢?查看硬件方面,比如内存,CPU使用情况
      

  7.   

    更新删除速度都还不错,CPU 和 内存也都不高就是查询起来太慢了,现在有一个网页需要按行业显示每个行业信息数的数量,也就是说在同一个页面有30几个,Select count(id) from info_id with(nolock) where notsh=1 and flagz=1 and sortid=sortid
      

  8.   

    把这个select放到usp中呢。。usp中也就是可以缓冲执行计划,不需要重新编译。(当然usp中不能写with recompli), 另Select count(id) from info_id with(nolock) where notsh=1 and flagz=1 and sortid=sortid ,group呢?