SQL Server更新统计信息

时间:2020-07-07 16:14:22

标签: sql-server

我对SQL Server统计信息有2个问题,请帮助我。我正在使用SQL Server 2016。

我的表TBL1只有一列COL1。当我在其他表的联接中使用COL1时,统计信息将自动在COL1上创建。

接下来,我在COL1的{​​{1}}上创建非聚集索引,然后在TBL1上创建另一组统计信息。现在,我有COL1的两组统计信息。

  1. 在以上2个统计信息中,SQL Server使用哪些统计信息进行进一步查询?我假设将使用非聚集索引创建的统计信息,对吗?

  2. 如果我使用COL1命令,则Update Statics TBL1的所有统计信息都会更新。在MSDN文档中,我看到更新统计信息会导致查询重新编译,这对查询的重新编译意味着什么? MSDN链接是 https://docs.microsoft.com/en-us/sql/relational-databases/statistics/update-statistics?view=sql-server-ver15

请解释。

1 个答案:

答案 0 :(得分:1)

如果表中只有1列,则没有理由使用非聚集索引。这将创建该数据的单独副本。只需在该列上创建聚簇索引。

  1. -由于您的表只有一个列,并且在该列上创建了索引,因此几乎可以肯定,SQL Server每次连接到该表时都会使用该索引。将会使用该索引的统计信息。

  2. 在这种情况下,这意味着由于过时的统计信息,缓存中的执行计划将失效,并且下一次查询执行优化器将重新创建执行计划。换句话说,将假定可能存在一组更好的步骤来执行查询,并且优化器将尝试组合一组更好的步骤(执行计划)来​​执行。

推荐读物: