• .GB级数据库分区实现高性能


    对于大容量数据库表,且有一定业务规则的(比如有时间规则)可作如下分区,以提升综合性能

     第一,创建分区函数:根据业务规则创建(比如一个月分一个或几个月分一个)

    第二,创建文件组:根据规则,将每一条规则对应一个文件(物理文件,NDF)

    第三,创建建立分区架构,用来将概念上的分区和文件组(物理文件)关联起来

    第四,建立分区表

    以上做完,当执行INSERT时,分区表会根据分区架构将记录插入不同的NDF文件中;当执行SELECT时,分区表也会根据分区架构从不同的NDF中查寻。

    具体实现如下:

    CREATE PARTITION FUNCTION FiveYearDateRangePFN(datetime)
    AS
    RANGE LEFT FOR VALUES (
    '20100930 23:59:59.997',   -- 2010年9 月
    '20101031 23:59:59.997',   -- 2010年10 月
    '20101130 23:59:59.997',   -- 2010年11 月
    '20101231 23:59:59.997'    -- 2010年12 月
    )
    GO
    ALTER DATABASE TEST01 ADD FILEGROUP [Test201009]
    ALTER DATABASE TEST01 ADD FILEGROUP [Test201010]
    ALTER DATABASE TEST01 ADD FILEGROUP [Test201011]
    ALTER DATABASE TEST01 ADD FILEGROUP [Test201012]
    GO
    ALTER DATABASE TEST01
    ADD FILE
    (NAME = N'Test201009',FILENAME = N'D:\DataFileGroup\Test201009.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [Test201009]
    GO
    ALTER DATABASE TEST01
    ADD FILE
    (NAME = N'Test201010',FILENAME = N'D:\DataFileGroup\Test201010.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [Test201010]
    GO
    ALTER DATABASE TEST01
    ADD FILE
    (NAME = N'Test201011',FILENAME = N'D:\DataFileGroup\Test201011.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [Test201011]
    go
    ALTER DATABASE TEST01
    ADD FILE
    (NAME = N'Test201012',FILENAME = N'D:\DataFileGroup\Test201012.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)
    TO FILEGROUP [Test201012]
    GO
    CREATE PARTITION SCHEME [FiveYearDateRangePScheme]
    AS
    PARTITION FiveYearDateRangePFN TO
    (
    [Test201009],[Test201010],[Test201011],[Test201012],[PRIMARY]
    )
    GO
    CREATE TABLE [dbo].[Test](
        [ID] [uniqueidentifier] NOT NULL,
        [Name] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
        [Date] [datetime] NOT NULL      
    ) ON FiveYearDateRangePScheme(Date)
    ALTER TABLE [Test]
    ADD CONSTRAINT [ObjTeaching_PK] PRIMARY KEY CLUSTERED ([ID], [Date])
    go
    insert into Test(id,name,date) values(newid(),'20100901','2010-09-01')
    insert into Test(id,name,date) values(newid(),'20101001','2010-10-01')
    insert into Test(id,name,date) values(newid(),'20101101','2010-11-01')
    insert into Test(id,name,date) values(newid(),'20101201','2010-12-01')
    select $partition.FiveYearDateRangePFN(date),date,*
    from Test a
    order by a.date asc
    GO

  • 相关阅读:
    我们的CPU遭到攻击[LOJ558]
    历史[ZJOI2018]
    字符串[LOJ6517]
    奥运公交[LOJ3255]
    BLO-Blockade[POI2008]
    压力[BJOI2013]
    Earthquake[USACO01OPEN]
    暴力写挂[CTSC2018]
    极简教程:数据结构与算法(二)
    DllRegisterServer的调用失败的问题解决方法
  • 原文地址:https://www.cnblogs.com/bobsoft/p/2714515.html
Copyright © 2020-2023  润新知