plantegg 发表于 2015-6-30 09:10:41

使用SQL Server 2008提供的表分区向导

  表分区(Partition Table)是自从SQL Server 2005就开始提供的功能,解决的问题是大型表的存储和查询。
   
  我们之前大致的语法是这样的

  -- =========================
  -- 演示:陈希章
  -- 如何创建分区函数
  -- 如何创建分区架构
  -- 如何创建分区表
  --=========================
  alter database adventureWorks add filegroup
  go
  alter database adventureWorks add filegroup
  go
  alter database adventureWorks add filegroup
  go
  alter database adventureWorks
  add file
  (name='fg1',
  filename='c:\fg1.ndf',
  size=5mb)
  to filegroup
  go
  alter database adventureWorks
  add file
  (name='fg2',
  filename='d:\fg2.ndf',
  size=5mb)
  to filegroup
  go
  alter database adventureWorks
  add file
  (name='fg3',
  filename='e:\fg3.ndf',
  size=5mb)
  to filegroup
  go
  use adventureWorks
  go
  Create partition function emailPF(nvarchar(50)) as range right for values ('G','N')--创建分区函数
  go
  Create partition scheme emailPS as partition emailPF to (fg1,fg2,fg3)--创建分区方案
  go
  Create table customermail (custid int, email nvarchar(50)) on emailPS(email)--创建分区表
  Go   
  
  为了简化操作,SQL Server 2008中为表分区提供了相关的操作






  这个向导有些诡异,居然希望表里面已经有数据。(费解)

  
  
  
  
  
  
  

  最后生成的脚本是这样的

  USE
GO
BEGIN TRANSACTION
CREATE PARTITION FUNCTION (date) AS RANGE LEFT FOR VALUES (N'2008-01-01', N'2008-02-01', N'2008-03-01')
  CREATE PARTITION SCHEME AS PARTITION TO (, , , )
  CREATE CLUSTERED INDEX ON .
(
   
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON ()
  DROP INDEX ON . WITH ( ONLINE = OFF )
  COMMIT TRANSACTION   
  
  
  
  这里要注意一个语法,因为现在表已经存在了,那么就不能再通过CREATE TABLE的方式来创建分区表了,而是通过创建一个聚集索引的方式。但又把它删除掉。
  但是,如果表上面已经有一个聚集索引呢?肯定会出错,因为一个表只能有一个聚集索引。那么该怎么办呢?
  我们发现向导会这样做,先把原先的聚集索引改为非聚聚的。这很有点意思嘛

  ALTER TABLE . ADDCONSTRAINT PRIMARY KEY NONCLUSTERED
(
    ASC
)WITH (PAD_INDEX= OFF, STATISTICS_NORECOMPUTE= OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS= ON) ON   
  除了提供了创建分区的向导之外,还有一个管理分区的向导,主要是可以做SWITCH,MERGE,SPLIT这些操作。也可以查看数据


  

  
  除了这些图形化工具的支持之外,SQL Server 2008的分区表还有不少增强,诸如性能等等方面
  http://technet.microsoft.com/zh-cn/library/ms345599.aspx
页: [1]
查看完整版本: 使用SQL Server 2008提供的表分区向导