何时手动重新计算指数统计信息



我有一个存储连续数据的应用程序。然后根据两列(timestampinteger)选择行。

为了保持性能尽可能好,我必须重新计算索引的统计数据,但是基于时间间隔重新计算有两个问题:

  1. 每天插入的行数可能非常不同。一个安装可能是十行,另一个安装可能有数百万行。
  2. 不能保证应用程序 24/7 全天候运行。例如,它可以每天只运行一小时,甚至每周运行一次。

我读到最好每天以最小负载重新计算一次索引统计信息,这对某些网络或公司数据库来说是很好的建议,但这是完全不同的情况,所以我想添加一些"智能"到自动重新计算。

每个表是否有一些行数(42;1,000;1,000,000?)应该重新计算统计信息?是否还取决于表中当前的总行数?

服务器使用统计信息从可用索引中选择最佳索引。检查非空数据库上的查询计划。如果当前统计数据是最佳的,并且相对数据分布不随时间变化,或者只是没有其他索引可供选择,则无需强制重新计算。

其他方法涉及使用查询文本直接指定最佳计划,或使用算术运算从评估中排除某些字段的索引,而不考虑实际统计信息。

例如,如果查询包含条件:

table_1.some_field = table_2.some_field

并且您不希望服务器在字段 table_1.some_field 上使用索引,然后写入:

table_1.some_field + 0 = table_2.some_field

这样,您可以强制服务器使用一个索引而不是另一个索引。

最新更新