• 测试分区表,以及在现有表上新建分区方案,以及把分区表变为普通表测试代码!!


    测试分区表,以及在现有表上新建分区方案,以及把分区表变为普通表测试代码!!

    --1.新建表直接运用分区方案,没有聚焦索引,没有主键,也看不到分区索引的关联,
    --  这时直接新建一个聚集索引加上  ON [PRIMARY] 此表不用合并分区就可以直接变成普通表
    --  不加 ON [PRIMARY] 的话还是聚集索引,并且对分区表也没有影响
    --2.在现在有的表上添加分区方案,想变普通表,直接重建聚集索引加上 ON [PRIMARY] 此表不用合并分区就可以直接变成普通表
    --3.变成普通表之后,想删除文件和文件组
    --  先删除分区方案再删除分区函数
    --  先删除文件再删除文件组
    
    
    --创建测试数据库
    CREATE DATABASE [test]
    
    --添加文件组
    USE [master]
    GO
    ALTER DATABASE [test] ADD FILEGROUP [test01]
    GO
    ALTER DATABASE [test] ADD FILEGROUP [test02]
    GO
    ALTER DATABASE [test] ADD FILEGROUP [test03]
    GO
    ALTER DATABASE [test] ADD FILEGROUP [test04]
    GO
    ALTER DATABASE [test] ADD FILEGROUP [test05]
    GO
    
    --添加文件
    USE [master]
    GO
    ALTER DATABASE [test] ADD FILE ( NAME = N'test01', FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA	est01.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [test01]
    GO
    ALTER DATABASE [test] ADD FILE ( NAME = N'test02', FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA	est02.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [test02]
    GO
    ALTER DATABASE [test] ADD FILE ( NAME = N'test03', FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA	est03.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [test03]
    GO
    ALTER DATABASE [test] ADD FILE ( NAME = N'test04', FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA	est04.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [test04]
    GO
    ALTER DATABASE [test] ADD FILE ( NAME = N'test05', FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA	est05.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [test05]
    GO
    
    --分区函数
    USE [test]
      CREATE PARTITION FUNCTION partfunSale (datetime)
    AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')
    
    --分区方案
    USE [test]
    CREATE PARTITION SCHEME partschSale
    AS PARTITION partfunSale
    TO (
        test01,
        test02,
        test03,
        test04,
        test05)
    
    --新建表,直接应用分区方案,也可表建成后,再添加分区方案
    --此种方式创建的表没有任何索引,创建聚集索引之后,加 ON [PRIMARY] 就可以直接变成普通表
    CREATE TABLE Sale(
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Name] [varchar](16) NOT NULL,
        [SaleTime][datetime] NOT NULL
    ) 
    ON partschSale([SaleTime])
    
            --想改为普通表时用
            --新建聚集索引,,不用合并分区,直接变成普通表-----必须加 ON [PRIMARY] 就可以直接变成普通表!!!
            CREATE CLUSTERED INDEX PK_Sale ON Sale([id])
             --WITH ( DROP_EXISTING = ON)
             ON [PRIMARY]
    
    
    INSERT Sale ([Name],[SaleTime]) values ('张三','2009-1-1')
    insert Sale ([Name],[SaleTime]) values ('李四','2009-2-1')
    insert Sale ([Name],[SaleTime]) values ('王五','2009-3-1')
    insert Sale ([Name],[SaleTime]) values ('钱六','2010-4-1')
    insert Sale ([Name],[SaleTime]) values ('赵七','2010-5-1')
    insert Sale ([Name],[SaleTime]) values ('张三','2011-6-1')
    insert Sale ([Name],[SaleTime]) values ('李四','2011-7-1')
    insert Sale ([Name],[SaleTime]) values ('王五','2011-8-1')
    insert Sale ([Name],[SaleTime]) values ('钱六','2012-9-1')
    insert Sale ([Name],[SaleTime]) values ('赵七','2012-10-1')
    insert Sale ([Name],[SaleTime]) values ('张三','2012-11-1')
    insert Sale ([Name],[SaleTime]) values ('李四','2013-12-1')
    insert Sale ([Name],[SaleTime]) values ('王五','2014-12-1')
    
    
    
    
    
    select * from Sale
    
    select $PARTITION.partfunSale ('2010-10-1')  
    select * from Sale where $PARTITION.partfunSale(SaleTime)=1
    select * from Sale where $PARTITION.partfunSale(SaleTime)=2
    select * from Sale where $PARTITION.partfunSale(SaleTime)=3
    select * from Sale where $PARTITION.partfunSale(SaleTime)=4
    select * from Sale where $PARTITION.partfunSale(SaleTime)=5
    
    select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
    
    --统计所有分区表中的记录总数
    select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
    --修改编号为1的记录,将时间改为2019年1月1日
    update Sale set SaleTime='2019-1-1' where id=1
    --重新统计所有分区表中的记录总数
    select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
    
    
    --索引重建,不用合并分区,直接变成普通表-----必须加 ON [PRIMARY] 就可以直接变成普通表!!!
    CREATE CLUSTERED INDEX PK_Sale ON Sale([id])
     --WITH ( DROP_EXISTING = ON)
     ON [PRIMARY]
    
    --删除原来的数据表
    drop table Sale
    
    --新建一个普通的数据表
    CREATE TABLE Sale(
        [Id] [int] IDENTITY(1,1) NOT NULL,            --自动增长
        [Name] [varchar](16) NOT NULL,
        [SaleTime] [datetime] NOT NULL,
        CONSTRAINT [PK_Sale] PRIMARY KEY CLUSTERED    --创建主键
        (
            [Id] ASC
        )
    )
    --插入一些记录
    insert Sale ([Name],[SaleTime]) values ('张三','2009-1-1')  
    insert Sale ([Name],[SaleTime]) values ('李四','2009-2-1')  
    insert Sale ([Name],[SaleTime]) values ('王五','2009-3-1')  
    insert Sale ([Name],[SaleTime]) values ('钱六','2010-4-1')  
    insert Sale ([Name],[SaleTime]) values ('赵七','2010-5-1')  
    insert Sale ([Name],[SaleTime]) values ('张三','2011-6-1')  
    insert Sale ([Name],[SaleTime]) values ('李四','2011-7-1')  
    insert Sale ([Name],[SaleTime]) values ('王五','2011-8-1')  
    insert Sale ([Name],[SaleTime]) values ('钱六','2012-9-1')  
    insert Sale ([Name],[SaleTime]) values ('赵七','2012-10-1')  
    insert Sale ([Name],[SaleTime]) values ('张三','2012-11-1')  
    insert Sale ([Name],[SaleTime]) values ('李四','2013-12-1')  
    insert Sale ([Name],[SaleTime]) values ('王五','2014-12-1')  
    
    --删掉主键
    ALTER TABLE Sale DROP constraint PK_Sale
    --创建主键,但不设为聚集索引
    ALTER TABLE Sale ADD CONSTRAINT PK_Sale PRIMARY KEY NONCLUSTERED
    (
        [ID] ASC
    ) ON [PRIMARY]
    
    
    --创建一个新的聚集索引,在该聚集索引中使用分区方案
    CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime])
    ON partschSale([SaleTime])
    
    --统计所有分区表中的记录总数  
    select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  
    
    ALTER PARTITION FUNCTION partfunSale()
        MERGE RANGE ('20100101')
    
    --统计所有分区表中的记录总数    
    select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
    --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中
    --现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2个分区表中的数据合并
    --修改分区函数
    ALTER PARTITION FUNCTION partfunSale()
        MERGE RANGE ('20100101')
    --统计所有分区表中的记录总数    
    select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
    
    --合并分区表
    ALTER PARTITION FUNCTION partfunSale()
        MERGE RANGE ('20100101')
    ALTER PARTITION FUNCTION partfunSale()
        MERGE RANGE ('20110101')
    ALTER PARTITION FUNCTION partfunSale()
        MERGE RANGE ('20120101')
    ALTER PARTITION FUNCTION partfunSale()
        MERGE RANGE ('20130101')
    
    --重建聚集索引,加 ON [PRIMARY] 就可以直接变成普通表
    CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime])
        WITH ( DROP_EXISTING = ON)
    ON [PRIMARY]
    
    
    --也可合并分区后,重建聚集索引,变成普通表!!
    
    
    --删除文件组之前必须先删除分区方案!!
    
    --删除分区方案
    USE [test]
    DROP PARTITION SCHEME partschSale
    GO
    
    
    --删除分区函数,删除分区函数前必须先删除分区方案,要不会提示
    USE [test]
    DROP PARTITION FUNCTION [partfunSale]
    GO
    
    
    --删除文件
    USE [test]
    GO
    ALTER DATABASE [test]  REMOVE FILE [test01]
    GO
    ALTER DATABASE [test]  REMOVE FILE [test02]
    GO
    ALTER DATABASE [test]  REMOVE FILE [test03]
    GO
    ALTER DATABASE [test]  REMOVE FILE [test04]
    GO
    ALTER DATABASE [test]  REMOVE FILE [test05]
    GO
    
    --删除文件组
    USE [test]
    GO
    ALTER DATABASE [test] REMOVE FILEGROUP [test05]
    GO
    ALTER DATABASE [test] REMOVE FILEGROUP [test04]
    GO
    ALTER DATABASE [test] REMOVE FILEGROUP [test03]
    GO
    ALTER DATABASE [test] REMOVE FILEGROUP [test02]
    GO
    ALTER DATABASE [test] REMOVE FILEGROUP [test01]
    GO
    
    
  • 相关阅读:
    prometheus,alertmanager 报警配置详解
    使用 kubeadm 搭建 kubernetes1.10 集群
    kibana-sentinl-监控报警
    ELK集群模式部署
    mongo 误操作恢复数据
    mongo 实时同步工具 mongosync
    移动端巨坑——iphone6Plus默认设置不使用sessionStorage
    iphone6 Plus seesionStorage失效
    移动端手势拖拽排序神器Sortable.js
    vue使用swiper(转)
  • 原文地址:https://www.cnblogs.com/davidhou/p/5153500.html
Copyright © 2020-2023  润新知