SQL 数据仓库中的“创建表为”功能是在后台创建统计信息,还是必须手动创建(就像我在执行普通的“创建表”语句时一样?)
问问题
241 次
1 回答
4
从当前版本开始,您始终必须在表上创建列级统计信息,无论它是使用普通命令CREATE TABLE
还是 CTASCREATE 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 行,例如
手动创建任何列级统计信息将更正此数字。
总之,无论表是如何创建的,始终手动创建重要列的统计信息。
于 2016-10-17T15:34:22.043 回答