zoukankan      html  css  js  c++  java
  • SqlServer 2005 将已存在大量数据的表更改为分区表

    一、分区表简介:

    使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。
    分区一方面可以将数据分为更小、更易管理的部分,为提高性能起到一定的作用;另一方面,对于如果具有多个CPU的系统,分区可以对表的操作通过并行的方式进行,这对于提升性能是非常有帮助的。

    二、创建步骤:

    现有一张表L_TESTRESULT共有3千万条记录,本文主要的目的是对这张表按时间进行分区,以便提高对该表的操作效率。

    1、   创建新文件组,最好新建一个文件组:

    ALTER DATABASE listest ADD FILEGROUP [lisfq]

    2、创建分区函数:

    CREATE PARTITION FUNCTION MonthDateRange(datetime)

     AS RANGE LEFT FOR VALUES

    (

    '20071231 23:59:59.997',

    '20080630 23:59:59.997',

    '20081231 23:59:59.997'

    )

    3、根据分区函数的时间分段点创建分区文件,分区文件最好与数据库文件在不同的磁盘上,提高磁盘的读写速度:

    ALTER DATABASE listest

    ADD FILE

    (NAME = N'lis200712',FILENAME = N'f:/data/lis200712.ndf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 5MB)

    TO FILEGROUP [lisfq]

    ALTER DATABASE listest

    ADD FILE

    (NAME = N'lis200806',FILENAME = N'f:/data/lis200806.ndf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 5MB)

    TO FILEGROUP [lisfq]

    ALTER DATABASE listest

    ADD FILE

    (NAME = N'lis200812',FILENAME = N'f:/data/lis200812.ndf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 5MB)

    TO FILEGROUP [lisfq]

    4、创建分区架构,将分区函数应用到该架构上:

    CREATE PARTITION SCHEME MonthDateRangeScheme

    AS

    PARTITION MonthDateRange

    ALL TO ([lisfq])

    已创建的分区函数与分区架构如下图:

    5、将已存在的数据表应用到该分区方案中,可以采用删除需分区字段的索引的方式进行,如本例中我用measuretime对该表进行分区:

    --删除该分区字段上的索引

    drop index  l_testresult.IDX_L_TESTRESULT_MEASURETIME

    --按分区方案创建索引

    create  index IDX_L_TESTRESULT_MEASURETIME

    on l_testresult(measuretime)

    on MonthDateRangeScheme(measuretime)

    6、对于分区表中存在聚集索引,最好将其删除重建:

    --重建聚聚集索引主建

    ALTER TABLE l_testresult

        DROP CONSTRAINT PK_L_testresult

    ALTER TABLE l_testresult

        ADD CONSTRAINT PK_l_testresult

           PRIMARY KEY CLUSTERED(sampleno,testid,sampletype,editstatus)

    三、查询分区信息:

        1、查询该表是不是分区成功:

    SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('l_testresult'),结果如下图:

    2、  查询某段时间的数据位于哪个分区:

    select * ,$PARTITION.MonthDateRange(measuretime) from l_testresult where measuretime>='2009-01-01',结果如下图:

  • 相关阅读:
    Java应用中的SQL依赖注入攻击和防范
    强大的 Jquery图表绘制插件 —— jqPlot
    jqPlot的Option配置对象详解
    也谈Java值传递到底传递了什么?
    Use Case 中 include 与 extend 的区别
    STAR UML 简述1
    在Hibernate中使用 HibernateTemplate的三种方法
    jquery ui tabs详解(中文)
    高性能网页开发规则
    如何绘制 UML 活动图(Activity Diagram)
  • 原文地址:https://www.cnblogs.com/Alex80/p/7513022.html
Copyright © 2011-2022 走看看