有没有遇到这样的问题:
在数据库里有出入库信息表InOutInfo,入库日期Indate,出库日期:OutDate,数据表约有100万条数据,之前按入库日期或出库日期查询时,查询速度越来越慢,后来在入库日期与出库日期建立索引,速度有很大改善。但是,只是对老数据有效,对新添加的数据,查询速度比之前还要慢,请问是什么原因?
比如今天是6月13日,我在这两个字段建立索引后,那查询今天的入库,过去某一天直到今天的入库,或是过去某一天的入库数据,查询速度都很快,1秒内。但到了明天,6月14日,入库表里有了新数据,我再查询14日的入库,或查询过去某一天直到14日的,速度都非常慢,几乎查不出,查询13日的,或者是过去某一天直到13日的,都很快。只有我在表里删除在Indate上建立的索引,重新再建立索引,速度又很快了,这到底是什么问题?请各位高手指点迷津!

解决方案 »

  1.   

    谢谢你的回复。可为什么其他表建立的索引没有这个问题?顺便说明下,在InOutInfo表中还有其他索引,会不会有冲突?还有没有更好的办法?优化器使用索引,需要哪些统计信息做依据?
      

  2.   

    SQL Server Management Studio 快捷工具栏里面有显示实际的执行计划按钮,选中然后执行语句就可以看到了。看里面相关列是索引查找还是扫描。
      

  3.   

    听说过,没遇过,是不是你的统计信息没有设置定期更新啊?统计信息有很多,但是都是SQL Server自己管理的,只要设置定时更新就好了。不过默认值就可以,这个好像是在数据库→属性→选项→自动那里的,看看是不是有人改动了默认值,使得它关闭或者长时间不更新。你也可以看看执行计划的实际行数和预估行数,如果差异比较大,那通常是统计信息有误。目前我只知道可能这个地方出现问题,也请各位大牛指点一下。
      

  4.   

    更新统计信息好像是sp_updatestati什么什么的,不记得了,可以到帮助上看看。
      

  5.   

    更新表或索引视图的查询优化统计信息。 默认情况下,查询优化器已根据需要更新统计信息以改进查询计划;但在某些情况下,您可以通过使用 UPDATE STATISTICS 或存储过程 sp_updatestats 来比默认更新更频繁地更新统计信息,提高查询性能。
    UPDATE STATISTICS tablename
      

  6.   

    UPDATE STATISTICS tablename、 sp_updatestats这两个方法都试过了,对查询效率没有明显影响,依然很慢。把建立在Indate上的索引删除后再重新建立,查询速度就快了,到底是什么问题?