zoukankan      html  css  js  c++  java
  • 使用SQL Server 2008提供的表分区向导

    表分区(Partition Table)是自从SQL Server 2005就开始提供的功能,解决的问题是大型表的存储和查询。

    image image image image

    我们之前大致的语法是这样的

    -- =========================

    -- 演示:陈希章

    -- 如何创建分区函数

    -- 如何创建分区架构

    -- 如何创建分区表

    --=========================

    alter database adventureWorks add filegroup [fg1]

    go

    alter database adventureWorks add filegroup [fg2]

    go

    alter database adventureWorks add filegroup [fg3]

    go

    alter database adventureWorks

    add file

    (name='fg1',

    filename='c:\fg1.ndf',

    size=5mb)

    to filegroup [fg1]

    go

    alter database adventureWorks

    add file

    (name='fg2',

    filename='d:\fg2.ndf',

    size=5mb)

    to filegroup [fg2]

    go

    alter database adventureWorks

    add file

    (name='fg3',

    filename='e:\fg3.ndf',

    size=5mb)

    to filegroup [fg3]

    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中为表分区提供了相关的操作

    image

    image

    image

    image

    image

    image

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

    image 

    image

    最后生成的脚本是这样的

    USE [demo]
    GO
    BEGIN TRANSACTION
    CREATE PARTITION FUNCTION [ordersfunction](date) AS RANGE LEFT FOR VALUES (N'2008-01-01', N'2008-02-01', N'2008-03-01')

    CREATE PARTITION SCHEME [ordersscheme] AS PARTITION [ordersfunction] TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])

    CREATE CLUSTERED INDEX [ClusteredIndex_on_ordersscheme_633765890752500000] ON [dbo].[Orders]
    (
        [OrderDate]
    )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [ordersscheme]([OrderDate])

    DROP INDEX [ClusteredIndex_on_ordersscheme_633765890752500000] ON [dbo].[Orders] WITH ( ONLINE = OFF )

    COMMIT TRANSACTION

    这里要注意一个语法,因为现在表已经存在了,那么就不能再通过CREATE TABLE的方式来创建分区表了,而是通过创建一个聚集索引的方式。但又把它删除掉。

    但是,如果表上面已经有一个聚集索引呢?肯定会出错,因为一个表只能有一个聚集索引。那么该怎么办呢?

    我们发现向导会这样做,先把原先的聚集索引改为非聚聚的。这很有点意思嘛

    ALTER TABLE [dbo].[Orders] ADD  CONSTRAINT [PK_Orders] PRIMARY KEY NONCLUSTERED
    (
        [OrderId] 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 [PRIMARY]

    除了提供了创建分区的向导之外,还有一个管理分区的向导,主要是可以做SWITCH,MERGE,SPLIT这些操作。也可以查看数据

    image

    image

    image 

    除了这些图形化工具的支持之外,SQL Server 2008的分区表还有不少增强,诸如性能等等方面

    http://technet.microsoft.com/zh-cn/library/ms345599.aspx

  • 相关阅读:
    《感想都是碎片》
    我容易么我……
    elvish Template Library
    可以直接在C++里面写类似RSL的shader了
    全身和鞘内注射依那西普抑制糖尿病小鼠的触觉异常痛敏
    针对英夫利昔单抗或阿达木单抗的抗体存在与否决定转用依那西普的疗效
    全基因组关联研究发现TNF抑制剂治疗RA与7个位点的多态性有关
    依那西普治疗幼年型特发性关节炎的疗效
    强直性脊柱炎中的髋关节受累:流行病学和髋关节置换术的相关危险因素
    长期使用依那西普对幼年型特发性关节炎患儿生长的影响
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1445834.html
Copyright © 2011-2022 走看看