在SQL Server 2000 数据仓库中使用分区

ZDNet软件频道 时间:2008-09-22 作者:tech.ddvip.com | 天新网 我要评论()
本文关键词:数据库 Mssql SQL SQL Server
分区视图联接来自一组成员的水平分区数据,使数据看起来象来自同一张表。SQL Server 2000 区分本地分区视图和分布式分区视图。

分区设计概述

SQL Server 数据库中的分区表可以使用可更新或可查询(不可更新)的分区视图。在这两种情况下,表分区都是由每个分区都包含正确数据的 CHECK 约束来创建的。一个可更新的分区视图支持对视图进行 INSERT (或 UPDATE 或 DELETE)操作,并将操作推入至正确的基础表。这很有益处,但数据仓库应用程序通常需要进行批量加载,而这是无法通过视图执行的。下表总结了可更新和可查询分区视图的要求、优点和缺点。

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]
ADD PRIMARY KEY (
[date_key], [product_key], [customer_key], [promotion_key], [store_key])

创建 UNION ALL 视图:

CREATE VIEW [dbo].[sales_fact]
AS
SELECT * FROM [dbo].[sales_fact_19990101]
UNION ALL
SELECT * FROM [dbo].[sales_fact_20000101]

现在插入几行数据,例如:

INSERT INTO [sales_fact]
VALUES (19990125, 347, 8901, 0, 13, 5.3100, 1.8585, 3.0)
INSERT INTO [sales_fact]
VALUES (19990324, 576, 7203, 0, 13, 2.1000, 0.9450, 3.0)
INSERT INTO [sales_fact]
VALUES (19990604, 139, 7203, 0, 13, 5.3700, 2.2017, 3.0)
INSERT INTO [sales_fact]
VALUES (20000914, 396, 8814, 0, 13, 6.4800, 2.0736, 2.0)
INSERT INTO [sales_fact]
VALUES (20001113, 260, 8269, 0, 13, 5.5200, 2.4840, 3.0)

要验证分区是否正常工作,请使用查询分析器来显示查询计划,例如:

SELECT TOP 2 * FROM sales_fact WHERE date_key = 19990324

数据库

Mssql

SQL

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134