zoukankan      html  css  js  c++  java
  • sqlserver表分区

    原理就类似于把一个表的资 料放在不同的分区里面,当查询时,如果都在同一个单独的分区内的话,就不用进行全表扫描,因此在这些情况下可以提高查询的效率,但如果所有分区都要查询所 有资料的话,分区并不会提高效率.

    --创建分区表过程一共分为三步:创建分区函数、创建分区方案、创建分区表
    USE [CardID]
    GO
    BEGIN TRANSACTION
    ----创建分区函数
    CREATE PARTITION FUNCTION [SlotecardFunction](datetime) AS RANGE left FOR VALUES (N'2014-03-26T00:00:00', N'2014-04-26T00:00:00', N'2014-05-26T00:00:00', N'2014-06-26T00:00:00', N'2014-07-26T00:00:00', N'2014-08-26T00:00:00', N'2014-09-26T00:00:00')
    --查看分区函数是否创建成功
     --select * from sys.partition_functions
    --创建分区方案 关联到分区函数
    CREATE PARTITION SCHEME [Slotecard] AS PARTITION [SlotecardFunction] TO ([PRIMARY], [fg1], [fg2], [fg3], [fg4], [fg5], [fg6], [fg7])
    
    --查看已创建的分区方案
    --select * from sys.partition_schemes
    ALTER TABLE [dbo].[ak_SloteCardTimes] DROP CONSTRAINT [PK_ak_SloteCardTimes]
    --这里要注意一个语法,因为现在表已经存在了,那么就不能再通过CREATE TABLE的方式来创建分区表了,而是通过创建一个聚集索引的方式。但又把它删除掉。
    --但是,如果表上面已经有一个聚集索引呢?肯定会出错,因为一个表只能有一个聚集索引。那么该怎么办呢?
    --我们发现向导会这样做,先把原先的聚集索引改为非聚聚的。
    ALTER TABLE [dbo].[ak_SloteCardTimes] ADD  CONSTRAINT [PK_ak_SloteCardTimes] PRIMARY KEY NONCLUSTERED 
    (
    	[RecordID] 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]
    
    --创建聚集索引
    CREATE CLUSTERED INDEX [ClusteredIndex_on_Slotecard_635317831823593750] ON [dbo].[ak_SloteCardTimes] 
    (
    [SloteCardTime] )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [Slotecard]([SloteCardTime]) --删除聚集索引 DROP INDEX [ClusteredIndex_on_Slotecard_635317831823593750] ON [dbo].[ak_SloteCardTimes] WITH ( ONLINE = OFF ) COMMIT TRANSACTION

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

    select $PARTITION.Slotecard([SloteCardTime]) as 分区编号,count([RecordID]) as 记录数 from [ak_SloteCardTimes] group by $PARTITION.Slotecard([SloteCardTime])  
     
    -- 查询某个分区
    --这里我们要用到$PARTITION 函数,这个函数可以帮助我们查询某个分区的数据,还可以检索某个值所隶属的分区号。$PARTITION 函数的进一步细节可以查看MSDN
    --查询已分区表Order的第一个分区,代码如下:
       select*from [ak_SloteCardTimes] 
       where $partition.Slotecard
       ([SloteCardTime])=1
    
  • 相关阅读:
    从头学习Drupal基本概念和架构
    《Zend Framework in Action》 《ZF实战》 中文翻译
    網頁技術與標準
    Symbian定义属于自己MenuBar(转)
    Symbian中使用日志类(RFileLogger)(转)
    如何向Symbian C++程序中添加多语言支持(转)
    (转)symbian 接入点选择 & ini文件读写
    How to get TDataType (Mime type) of a file(转)
    Function ereg() is deprecated——drupal6.13 & PHP5.3
    ecom.h: No such file or directory
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/3636262.html
Copyright © 2011-2022 走看看