【发布时间】:2017-02-26 12:55:13
【问题描述】:
SQL 数据仓库中的“创建表为”功能是在后台创建统计信息,还是必须手动创建(就像我在执行普通的“创建表”语句时那样?)
【问题讨论】:
标签: azure-sqldw
SQL 数据仓库中的“创建表为”功能是在后台创建统计信息,还是必须手动创建(就像我在执行普通的“创建表”语句时那样?)
【问题讨论】:
标签: azure-sqldw
在当前版本中,您总是必须在表上创建列级统计信息,无论它是使用普通 CREATE TABLE 还是 CTAS CREATE TABLE AS... 命令创建的。为 JOIN、WHERE 子句、GROUP BY、ORDER BY 和 DISTINCT 子句中使用的列创建统计信息也是一种很好的做法。
关于使用 CTAS 创建的表,数据库引擎对sys.partitions 中列出的表中有多少行有正确的认识,但在列级别的统计信息级别上没有。对于CREATE TABLE 创建的表,默认为 1,000 行。对于下面的示例,第一个表是使用 CTAS 创建的,有 208 行,第二个表使用第一个表中的普通 CREATE TABLE 和 INSERT,也有 208 行,但 sys.partitions 认为它有 1,000例如
手动创建任何列级统计信息将更正此数字。
总之,无论表是如何创建的,始终手动创建重要列的统计信息。
【讨论】: