【发布时间】:2010-09-12 23:11:39
【问题描述】:
我想知道更新统计信息之前是否对您有所帮助,您是如何知道要更新它们的?
【问题讨论】:
标签: sql-server tsql
我想知道更新统计信息之前是否对您有所帮助,您是如何知道要更新它们的?
【问题讨论】:
标签: sql-server tsql
exec sp_updatestats
是的,如果您发现查询没有达到应有的效果,更新统计信息会非常有用。这可以通过检查查询计划并注意何时执行表扫描或索引扫描而不是索引查找来证明。所有这些都假设您已正确设置索引。
还有UPDATE STATISTICS 命令,但我个人从未使用过。
【讨论】:
将统计信息更新添加到维护计划(如在企业管理器定义的维护计划中)是很常见的。这样它就会按计划进行 - 每天、每周等等。
SQL Server 2000 使用统计数据来做出有关查询执行的正确决策,因此它们肯定会有所帮助。
最好同时重建索引(DBCC DBREINDEX 和 DBCC INDEXDEFRAG)。
【讨论】:
如果您重建索引,则这些索引的统计信息会自动重建。 如果您的时间框架允许,那么在维护计划的一部分中运行 UPDATE STATISTICS 是一个好主意,每晚运行一次(如果您的索引的重建频率低于此频率)。
SQL Server:要确定过时的统计信息是否是导致查询性能不佳的原因,请在 Management Studio 中打开“查询->显示估计的执行计划”(CTRL-L) 并运行查询。打开另一个窗口,粘贴相同的查询并在 Management Studio 中打开“查询->显示实际执行计划”(CTRL-M)并重新运行查询。如果执行计划不同,那么统计数据很可能已过时。
【讨论】:
在发生以下事件后需要更新统计信息:
- 记录被插入到您的表中
- 记录已从您的表中删除
- 记录在您的表中更新
如果您有一个包含数百万条记录的大型数据库,并且每天有大量写入,您可能应该确定一个非高峰时间来安排索引更新。
此外,您需要考虑您的流量类型。如果表中有很多(数百万)条记录,并且具有许多外键依赖项,并且写入读取的比例较大,您可能需要考虑关闭自动统计重新计算(注意:此功能将在未来版本中删除SQL Server,但对于 SQL Server 2000,你应该没问题)。这告诉引擎不要重新计算每个 INSERT、DELETE 或 UPDATE 的统计信息,并使这些操作的性能更高。
索引不是笑话。它们是高性能数据库的核心和灵魂。
【讨论】: