我是SQL Server的新手,试图优化我从前同事那里收到的程序(我不能问他)。
在最后一步,该过程使用一条MERGE
语句更新一个大表。之后,它将丢弃两个非聚集索引并再次创建它们。这样做的目的是什么?是否不定期收集优化程序的统计信息?重新创建索引是为优化器提供最新统计信息的唯一方法吗?
谢谢
之后,它将丢弃两个非聚集索引并再次创建它们。这样做的目的是什么?
将它们组织到更少的空间,而不会在合并过程中发生页面拆分。通常,根本不需要-完全一样。这也许是有道理的,但是在执行此操作之前,最好先分析有关页面拆分的索引统计信息,除非您可以确定它对每次加载都有益。
是否不定期收集优化程序的统计信息?
它们是,但是重新组织索引可能会使它们更有效。随着数据的变化,索引页中的数据也会发生变化,当数据溢出时,页面将被拆分。这导致索引(nto统计信息)随着时间的推移而变得不平衡,这可能会导致额外的IO负载。
重新创建索引是为优化器提供最新统计信息的唯一方法吗?
不。但是您首先不要为统计而这样做。您可以根据需要更新统计信息。您这样做是为了获得有效的索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句