• SQLServer 2005 海量数据解决方案(分区表)与对已存在的表进行分区



        这两天一直在研究2005 中如何对表进行分区,但是参考了多数资料都是说新建表后再将原表中数据插入到新表中,这样有些不方便.

        最后找到了在已有表上做分区表的方法.见代码.

        我们有个表现在已经到了1千万的数据,之前仅仅是优化索引和索引试图来在真实的环境中查看到底sql2005单表能负载多大的量。
         最后得出结论,在我们公司现有的硬件条件下,sql2005中,单表的量最多不能超过250w数据。(这个数据会根据硬件的不同而会有所不同.)

    ---select * from t200705

    --1.先根据表数据的量大小,来拆分每一个分区,保证每一个分区表的记录尽量在250w条记录左右.

    --分区函数

    CREATE PARTITION FUNCTION MonthDateRange(datetime)
     AS RANGE LEFT FOR VALUES
    (
    '20070131 23:59:59.997',
    '20070531 23:59:59.997',
    '20071231 23:59:59.997'
    )

    --2然后我们需要添加相应的文件组 .我使用的是主文件组.
    ALTER DATABASE T1 ADD FILEGROUP [PRIMARY]
    ALTER DATABASE T1 ADD FILEGROUP [PRIMARY]
    ALTER DATABASE T1 ADD FILEGROUP [PRIMARY]

    --3.我们需要在服务器上建立出单独的文件(涉及到的朋友可能知道,我们如果把文件分布在不同的磁盘上,可以最大限度的提高磁头的读写能力;另:这里微软建议数据库服务器最好--作Raid0 + Raid1).我由于是做测试,所以就放在了一个硬盘上了.

    ALTER DATABASE T1
    ADD FILE
    (NAME = N'View200701',FILENAME = N'D:"View200701.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [PRIMARY]

    ALTER DATABASE T1
    ADD FILE
    (NAME = N'View200702',FILENAME = N'D:"View200702.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [PRIMARY]

    ALTER DATABASE T1
    ADD FILE
    (NAME = N'View200703',FILENAME = N'D:"View200703.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [PRIMARY]

    --4.创建关联

    --分区架构

    CREATE PARTITION SCHEME MonthDateRangeScheme
    AS
    PARTITION MonthDateRange
    ALL TO ([PRIMARY])

    ---5.创建表和索引(我这里只列出如何创建表)
    ---
    /*5.
    CREATE TABLE 表
    {

    }
    ON MonthDateRangeScheme (日期列)
    GO
    */
    --6. --对已经存在的表进行分区设置

    --切换到分区表
    ALTER TABLE t200705
    ADD
    PRIMARY KEY NONCLUSTERED(rownumber,starttime)
    ON MonthDateRangeScheme(starttime)
    GO

    /*
    -- 切换到分区表

    ALTER TABLE dbo.t200705
    DROP CONSTRAINT rownumber,starttime
    WITH(
    MOVE
    TO PS_MonthDateRangeScheme(starttime)
    )

    */

    ---如果大家希望查询此表中的相关数据,可以使用如下语句

    SELECT *, $PARTITION.MonthDateRange(starttime) AS T2007 FROM t200705
    where starttime>'20070603'


    ---7删除

    -- 删除测试
    --DROP TABLE dbo.t200705
    --DROP PARTITION SCHEME MonthDateRangeScheme
    ---DROP PARTITION FUNCTION MonthDateRange

  • 相关阅读:
    HTTP状态码
    MySQL的order by时区分大小写
    CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的实现原理和适用场景
    Map接口
    Python中创建守护进程
    df说磁盘空间满了, du说没有,到底谁是对的
    几种分布式文件系统对比
    Unity:控制粒子特效的移动方向
    创建NuGet包
    NuGet的简单使用
  • 原文地址:https://www.cnblogs.com/chillsrc/p/1254698.html
Copyright © 2020-2023  润新知