2016-10-17 101 views
2

SQL数据仓库中的“Create table as”函数是否在后台创建统计信息,还是必须手动创建它们(就像我在执行普通“Create table”语句时一样? )Azure SQL数据仓库CTAS统计

回答

4

由于当前版本中,你总是上创建表的列级统计信息,不管它是否具有正常CREATE TABLE或CTAS CREATE TABLE AS...命令创建的。为JOINs,WHERE子句,GROUP BY,ORDER BY和DISTINCT子句中使用的列创建统计信息也是很好的做法。

关于使用CTAS创建的表,数据库引擎正确地知道表中有多少行,如sys.partitions中所列,但不在列级统计级别。对于由CREATE TABLE创建的表,此默认值为1,000行。对于下面的例子中,第一表用CTAS创建并具有208行,与来自该第一表的普通CREATE TABLEINSERT第二表,并且还具有208行,但sys.partitions认为它具有1000例如

sys.partitions

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

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