2

SQL 数据仓库中的“创建表为”功能是在后台创建统计信息,还是必须手动创建(就像我在执行普通的“创建表”语句时一样?)

4

1 回答 1

4

从当前版本开始,您始终必须在表上创建列级统计信息,无论它是使用普通命令CREATE TABLE还是 CTASCREATE TABLE AS...命令创建的。为 JOIN、WHERE 子句、GROUP BY、ORDER BY 和 DISTINCT 子句中使用的列创建统计信息也是一种很好的做法。

对于使用 CTAS 创建的表,数据库引擎对表中列出的行数有一个正确的认识sys.partitions,但在列级统计级别上却没有。对于CREATE TABLE由此创建的表,默认为 1,000 行。对于下面的示例,第一个表是用 CTAS 创建的,有 208 行,第二个表是普通表CREATE TABLEINSERT来自第一个表,也有 208 行,但sys.partitions相信它有 1,000 行,例如

系统分区

手动创建任何列级统计信息将更正此数字。

总之,无论表是如何创建的,始终手动创建重要列的统计信息。

于 2016-10-17T15:34:22.043 回答