首先,让我指出我不是 Firebird 专家,所以我根据 SQL Server 的工作原理来回答。
在这种情况下,答案是肯定的,也不是。
索引当然会在 SQL Server 上更新,从某种意义上说,如果您插入新行,该表的所有索引都将包含该行,因此会找到该行。因此,基本上,您不需要为该部分工作重新索引表。那是“不”的部分。
然而,问题不在于索引,而在于统计数据。您是说您需要重新索引表,但随后您显示了操纵统计数据的代码,这就是我要回答的原因。
简短的回答是,随着时间的推移,统计数据会慢慢失控。它们可能不会恶化到无法使用的程度,但是当您重新创建/重新计算它们时,它们会从它们所处的完美水平下降。那是“是”的部分。
陈旧统计信息的主要问题是,如果索引中键的分布发生剧烈变化,则统计信息可能不会立即获取,因此查询优化器将根据旧的、陈旧的统计数据选择错误的索引它手头上有。
例如,假设您的一个索引的统计数据表明键在值空间的一端聚集在一起(例如,具有大量 0 和 1 的 int-column)。然后,您插入大量行,这些行的值使该索引包含分布在整个范围内的值。
如果您现在执行一个查询,该查询使用来自另一个表的连接,在一个具有低选择性(也有很多 0 和 1)的列上针对您的这个索引的表,查询优化器可能会推断这个索引是好的,因为它将获取将同时使用的许多行(它们在同一个数据页上)。
但是,由于数据发生了变化,它会跳过索引来查找相关的部分,因此毕竟不是那么好。
重新计算统计信息后,查询优化器可能会发现该索引对于该查询来说是次优的,并选择另一个更适合的索引。
基本上,如果您的数据不断变化,您需要定期重新计算统计数据。如果您的数据很少更改,您可能不需要经常这样做,但我仍然会添加一个定期执行此操作的维护工作。
至于是否可以请火鸟自己做,我又如履薄冰,但我怀疑有。在 SQL Server 中,您可以按计划设置执行此操作的维护作业,并且至少您应该能够从 Windows 计划程序启动批处理文件来执行类似的操作。