可查询的分区视图
CHECK 约束强制使用的分区键
在成员表上定义的 UNION ALL 视图
查询性能:查询计划仅包括解析查询所必要的成员表。
加载性能:可高效地直接将数据批量加载至成员表。
存储:尽管推荐声明主键并在主键上创建索引的做法,但分区视图不要求主键索引。
视图最多可有 256 个成员表。
必须创建维护应用程序来管理分区和加载。
Microsoft 建议的做法是定义主键,并将事实表设计为本地(单个服务器上)的分区联合视图。大多数情况下,该定义会产生可更新的分区视图,但数据仓库维护应用程序应设计为直接将大多数数据批量加载至成员表(而不是通过视图进行)。
语法示例
以下代码示例用来说明定义成员表和联合视图以及将数据插入视图的语法:
-- 创建 1999 年事实表
CREATE TABLE [dbo].[sales_fact_19990101] (
[date_key] [int] NOT NULL
CHECK ([date_key] BETWEEN 19990101 AND 19991231),
[product_key] [int] NOT NULL ,
[customer_key] [int] NOT NULL ,
[promotion_key] [int] NOT NULL ,
[store_key] [int] NOT NULL ,
[store_sales] [money] NULL ,
[store_cost] [money] NULL ,
[unit_sales] [float] NULL
)
ALTER TABLE [sales_fact_19990101]
ADD PRIMARY KEY (
[date_key], [product_key], [customer_key], [promotion_key], [store_key])
;
-- 创建 2000 年事实表
CREA可查询的分区视图
CHECK 约束强制使用的分区键
在成员表上定义的 UNION ALL 视图
查询性能:查询计划仅包括解析查询所必要的成员表。
加载性能:可高效地直接将数据批量加载至成员表。
存储:尽管推荐声明主键并在主键上创建索引的做法,但分区视图不要求主键索引。
视图最多可有 256 个成员表。
必须创建维护应用程序来管理分区和加载。
Microsoft 建议的做法是定义主键,并将事实表设计为本地(单个服务器上)的分区联合视图。大多数情况下,该定义会产生可更新的分区视图,但数据仓库维护应用程序应设计为直接将大多数数据批量加载至成员表(而不是通过视图进行)。
语法示例
以下代码示例用来说明定义成员表和联合视图以及将数据插入视图的语法:
-- 创建 1999 年事实表
CREATE TABLE [dbo].[sales_fact_19990101] (
[date_key] [int] NOT NULL
CHECK ([date_key] BETWEEN 19990101 AND 19991231),
[product_key] [int] NOT NULL ,
[customer_key] [int] NOT NULL ,
[promotion_key] [int] NOT NULL ,
[store_key] [int] NOT NULL ,
[store_sales] [money] NULL ,
[store_cost] [money] NULL ,
[unit_sales] [float] NULL
)
ALTER TABLE [sales_fact_19990101]
ADD PRIMARY KEY (
[date_key], [product_key], [customer_key], [promotion_key], [store_key])
;
-- 创建 2000 年事实表
CREATE TABLE [dbo].[sales_fact_20000101] (
[date_key] [int] NOT NULL
CHECK ([date_key] BETWEEN 20000101 AND 20001231),
[product_key] [int] NOT NULL ,
[customer_key] [int] NOT NULL ,
[promotion_key] [int] NOT NULL ,
[store_key] [int] NOT NULL ,
[store_sales] [money] NULL ,
[store_cost] [money] NULL ,
[unit_sales] [float] NULL
)
ALTER TABLE [sales_fact_20000101]
TE TABLE [dbo].[sales_fact_20000101] (
[date_key] [int] NOT NULL
CHECK ([date_key] BETWEEN 20000101 AND 20001231),
[product_key] [int] NOT NULL ,
[customer_key] [int] NOT NULL ,
[promotion_key] [int] NOT NULL ,
[store_key] [int] NOT NULL ,
[store_sales] [money] NULL ,
[store_cost] [money] NULL ,
[unit_sales] [float] NULL
)
ALTER TABLE [sales_fact_20000101]