Azure SQL 数据仓库 CTAS 统计信息
Azure SQL Data Warehouse CTAS statistics
SQL Data Warehouse 中的 "Create table as" 函数是在后台创建统计信息,还是必须手动创建(就像我在执行普通 "Create table" 语句时所做的那样) ?)
从当前版本开始,您总是必须在 table 上创建列级统计信息,无论它是否是使用普通 CREATE TABLE
或 CTAS CREATE TABLE AS...
命令。为 JOIN、WHERE 子句、GROUP BY、ORDER BY 和 DISTINCT 子句中使用的列创建统计信息也是一种很好的做法。
关于使用 CTAS 创建的 tables,数据库引擎正确地知道 sys.partitions
中列出的 table 中有多少行,但不是列 - level 统计级别。对于 CREATE TABLE
创建的 table,默认为 1,000 行。对于下面的示例,第一个 table 是使用 CTAS 创建的并且有 208 行,第二个 table 使用普通的 CREATE TABLE
和第一个 table 的 INSERT
] 也有 208 行,但 sys.partitions
认为它有 1,000 行,例如
手动创建任何列级统计信息将更正此数字。
总而言之,无论 table 是如何创建的,始终针对重要列手动创建统计信息。
SQL Data Warehouse 中的 "Create table as" 函数是在后台创建统计信息,还是必须手动创建(就像我在执行普通 "Create table" 语句时所做的那样) ?)
从当前版本开始,您总是必须在 table 上创建列级统计信息,无论它是否是使用普通 CREATE TABLE
或 CTAS CREATE TABLE AS...
命令。为 JOIN、WHERE 子句、GROUP BY、ORDER BY 和 DISTINCT 子句中使用的列创建统计信息也是一种很好的做法。
关于使用 CTAS 创建的 tables,数据库引擎正确地知道 sys.partitions
中列出的 table 中有多少行,但不是列 - level 统计级别。对于 CREATE TABLE
创建的 table,默认为 1,000 行。对于下面的示例,第一个 table 是使用 CTAS 创建的并且有 208 行,第二个 table 使用普通的 CREATE TABLE
和第一个 table 的 INSERT
] 也有 208 行,但 sys.partitions
认为它有 1,000 行,例如
手动创建任何列级统计信息将更正此数字。
总而言之,无论 table 是如何创建的,始终针对重要列手动创建统计信息。