我对SQL Server统计信息有2个问题,请帮助我。我正在使用SQL Server 2016。
我的表TBL1
只有一列COL1
。当我在其他表的联接中使用COL1
时,统计信息将自动在COL1
上创建。
接下来,我在COL1
的{{1}}上创建非聚集索引,然后在TBL1
上创建另一组统计信息。现在,我有COL1
的两组统计信息。
在以上2个统计信息中,SQL Server使用哪些统计信息进行进一步查询?我假设将使用非聚集索引创建的统计信息,对吗?
如果我使用COL1
命令,则Update Statics TBL1
的所有统计信息都会更新。在MSDN文档中,我看到更新统计信息会导致查询重新编译,这对查询的重新编译意味着什么? MSDN链接是
https://docs.microsoft.com/en-us/sql/relational-databases/statistics/update-statistics?view=sql-server-ver15
请解释。
答案 0 :(得分:1)
如果表中只有1列,则没有理由使用非聚集索引。这将创建该数据的单独副本。只需在该列上创建聚簇索引。
是-由于您的表只有一个列,并且在该列上创建了索引,因此几乎可以肯定,SQL Server每次连接到该表时都会使用该索引。将会使用该索引的统计信息。
在这种情况下,这意味着由于过时的统计信息,缓存中的执行计划将失效,并且下一次查询执行优化器将重新创建执行计划。换句话说,将假定可能存在一组更好的步骤来执行查询,并且优化器将尝试组合一组更好的步骤(执行计划)来执行。
推荐读物: