日期:2014-05-17  浏览次数:20426 次

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


------解决方案--------------------
这种情况有可能是你的统计信息更新不及时,使得你的索引虽然建立了,但是优化器没有“察觉”。以为没有建索引。优化器使用索引时,是需要一些统计信息作为依据的。所以合理地更新统计信息是很有用。可以每天晚上定一个作业维护统计信息,维护计划就有这个功能。并且最好做一个作业2、3天重建一下索引。
------解决方案--------------------
看执行计划是否利用到建立的索引了?一个表的索引不易过多,建的多了反而可能会影响性能。
------解决方案--------------------
SQL Server Management Studio 快捷工具栏里面有显示实际的执行计划按钮,选中然后执行语句就可以看到了。看里面相关列是索引查找还是扫描。
------解决方案--------------------
听说过,没遇过,是不是你的统计信息没有设置定期更新啊?统计信息有很多,但是都是SQL Server自己管理的,只要设置定时更新就好了。不过默认值就可以,这个好像是在数据库→属性→选项→自动那里的,看看是不是有人改动了默认值,使得它关闭或者长时间不更新。你也可以看看执行计划的实际行数和预估行数,如果差异比较大,那通常是统计信息有误。目前我只知道可能这个地方出现问题,也请各位大牛指点一下。
------解决方案--------------------
更新统计信息好像是sp_updatestati什么什么的,不记得了,可以到帮助上看看。
------解决方案--------------------
更新表或索引视图的查询优化统计信息。 默认情况下,查询优化器已根据需要更新统计信息以改进查询计划;但在某些情况下,您可以通过使用 UPDATE STATISTICS 或存储过程 sp_updatestats 来比默认更新更频繁地更新统计信息,提高查询性能。
UPDATE STATISTICS tablename
------解决方案--------------------
一般来说让数据库自动更新即可,数据库会全部对象(表、索引)都更新。我建议你把有问题的那个查询的执行计划贴出来,看看是不是有其他的问题,而不是统计信息的问题。
------解决方案--------------------
探讨
多谢网友回复。问题是:数据库里有多个表,都在几个需要查询的字段上建立了索引,但只有这一个表查询速度慢,其他表查询速度都在1秒内,如果需要更新表或索引视图的查询优化,为什么其他表不需要呢?请再帮忙分析下。