zoukankan      html  css  js  c++  java
  • 【转载】SQL2008分区表的应用策略 .

    由于公司项目上要使用分区表来对表进行分区管理。。。

    首先创建表结构,其中我们用AIR_FROM_DATETIME字段来进行分区。。。

    1. CREATE TABLE [dbo].[BA_CACHE_AIR_RESULT](  
    2.     [AIR_ID] [nvarchar](50) NOT NULL,  
    3.     [TRIPINDEX] [nvarchar](50) NULL,  
    4.     [AIR_AGENT_ID] [varchar](36) NULL,  
    5.     [AIR_FROM_AIRPORT_CODE] [nvarchar](10) NULL,  
    6.     [AIR_TO_AIRPORT_CODE] [nvarchar](10) NULL,  
    7.     [AIR_FROM_AIRPORT_NAME] [nvarchar](50) NULL,  
    8.     [AIR_TO_AIRPORT_NAME] [nvarchar](50) NULL,  
    9.     [AIR_FROM_CITY_NAME] [nvarchar](50) NULL,  
    10.     [AIR_TO_CITY_NAME] [nvarchar](50) NULL,  
    11.     [AIR_FROM_DATETIME] [datetime] NULL,  
    12.     [AIR_TO_DATETIME] [datetime] NULL,  
    13.     [AIR_AIRFARE_PRICE] [decimal](18, 2) NULL,  
    14.     [AIR_ADULT_DISCOUNT] [decimal](18, 2) NULL,  
    15.     [AIR_CHILD_DISCOUNT] [decimal](18, 2) NULL,  
    16.     [AIR_BABY_DISCOUNT] [decimal](18, 2) NULL,  
    17.     [AIR_ADULT_DISCOUNT_ORDER] [tinyint] NULL,  
    18.     [AIR_TAX_FEE] [nvarchar](40) NULL,  
    19.     [AIR_OIL_FEE] [nvarchar](40) NULL,  
    20.     [AIR_AIRLINES_INFO] [nvarchar](50) NULL,  
    21.     [AIR_FLIGHT_CODE] [nvarchar](50) NULL,  
    22.     [AIR_FLIGHT_TYPE] [nvarchar](50) NULL,  
    23.     [AIR_CABIN_CODE] [nvarchar](50) NULL,  
    24.     [AIR_CABIN_NAME] [nvarchar](50) NULL,  
    25.     [AIR_AIRPLANE_INFO] [nvarchar](1000) NULL,  
    26.     [AIR_TUIPIAO_DESC] [nvarchar](1000) NULL,  
    27.     [AIR_GENGGAI_DESC] [nvarchar](1000) NULL,  
    28.     [AIR_QIANZHUAN_DESC] [nvarchar](1000) NULL,  
    29.     [AIR_INSURANCE_FEE] [decimal](18, 0) NULL,  
    30.     [AIR_TICKET_COUNT] [nvarchar](10) NULL,  
    31.     [AIR_LEG_TYPE] [nvarchar](1) NULL,  
    32.     [AIR_TRANSIT_AIRPORT_CODE] [nvarchar](50) NULL,  
    33.     [AIR_TRANSIT_AIRPORT_NAME] [nvarchar](50) NULL,  
    34.     [AIR_TRANSIT_CITY_NAME] [nvarchar](50) NULL,  
    35.     [AIR_TRANSIT_TO_DATETIME] [nvarchar](50) NULL,  
    36.     [AIR_TRANSIT_FROM_DATETIME] [nvarchar](50) NULL,  
    37.     [AIR_TRANSIT_AIRLINES_INFO] [nvarchar](50) NULL,  
    38.     [AIR_TRANSIT_FLIGHT_CODE] [nvarchar](50) NULL,  
    39.     [AIR_TRANSIT_AIRPLANE_INFO] [nvarchar](1000) NULL,  
    40.     [AIR_TRANSIT_TAX_FEE] [nvarchar](20) NULL,  
    41.     [AIR_TRANSIT_OIL_FEE] [nvarchar](20) NULL,  
    42.     [AIR_FROM_CITY_CODE] [nvarchar](10) NULL,  
    43.     [AIR_TO_CITY_CODE] [nvarchar](10) NULL,  
    44.     [AIR_AFTER_DISCOUNT_ADULT_PRICE] [decimal](18, 2) NULL,  
    45.     [AIR_AFTER_DISCOUNT_CHILD_PRICE] [decimal](18, 2) NULL,  
    46.     [AIR_AFTER_DISCOUNT_BABY_PRICE] [decimal](18, 2) NULL,  
    47.     [AIR_AIRLINE_RULE_ID] [varchar](5) NULL,  
    48.     [AIR_TOURCODE_ID] [varchar](20) NULL,  
    49.     [AIR_TJ] [nvarchar](1) NULL,  
    50.     [AIR_FAREBASIS] [nvarchar](100) NULL,  
    51.     [AIR_CODESHARE] [varchar](5) NULL,  
    52.     [AIR_CREATETIME] [datetime] NULL,  
    53.     [AIR_OFTEN] [int] NULL,  
    54.  CONSTRAINT [PK_AIR_ID] PRIMARY KEY NONCLUSTERED   
    55. (  
    56.     [AIR_ID] ASC  
    57. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFIGNORE_DUP_KEY = OFFALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
    58. )  
    59.   
    60. GO  
    61.   
    62. SET ANSI_PADDING OFF  
    63. GO  
    64.   
    65. ALTER TABLE [dbo].[BA_CACHE_AIR_RESULT] ADD  DEFAULT ('false') FOR [AIR_CODESHARE]  
    66. GO  
    67.   
    68. ALTER TABLE [dbo].[BA_CACHE_AIR_RESULT] ADD  DEFAULT (getdate()) FOR [AIR_CREATETIME]  
    69. GO  

    表结构创建好了后,创建三个非聚集索引,如果应用了分区表的话,最好是不要使用聚集索引的。如果在其中一个分区使用了,则数据又会回到那个分区上。。。分区表就没作用了。。

    1. ALTER TABLE BA_CACHE_AIR_RESULT DROP constraint PK_AIR_ID  
    2. --创建主键,但不设为聚集索引     
    3. ALTER TABLE BA_CACHE_AIR_RESULT ADD CONSTRAINT PK_AIR_ID PRIMARY KEY NONCLUSTERED     
    4. (     
    5.     AIR_ID ASC     
    6. ) ON [PRIMARY]  
    7.   
    8.   
    9. IF EXISTS(  
    10. SELECT * FROM SYSINDEXES WHERE name='IX_001' AND id IN(SELECT id FROM sysobjects WHERE name='BA_CACHE_AIR_RESULT')  
    11. )  
    12. BEGIN  
    13.  DROP INDEX IX_001 ON BA_CACHE_AIR_RESULT  
    14. END  
    15. CREATE NONCLUSTERED INDEX [IX_001] ON [dbo].[BA_CACHE_AIR_RESULT]   
    16. (  
    17.     [AIR_FROM_CITY_CODE] ASC,  
    18.     [AIR_TO_CITY_CODE] ASC,  
    19.     [AIR_FROM_DATETIME] ASC  
    20. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFSORT_IN_TEMPDB = OFF,   
    21. IGNORE_DUP_KEY = OFFDROP_EXISTING = OFFONLINE = OFFALLOW_ROW_LOCKS  = ON,   
    22. ALLOW_PAGE_LOCKS  = ON)   
    23.   
    24. IF EXISTS(SELECT * FROM SYSINDEXES WHERE name='IX_002' AND id IN(SELECT id FROM sysobjects WHERE name='BA_CACHE_AIR_RESULT'))  
    25. BEGIN  
    26.  DROP INDEX IX_002 ON BA_CACHE_AIR_RESULT  
    27. END  
    28. /****** Object:  Index [IX_002]    Script Date: 03/09/2011 19:03:52 ******/  
    29. CREATE NONCLUSTERED INDEX [IX_002] ON [dbo].[BA_CACHE_AIR_RESULT]   
    30. (  
    31.     [AIR_AGENT_ID] ASC,  
    32.     [AIR_FLIGHT_CODE] ASC,  
    33.     [AIR_TRANSIT_FROM_DATETIME] ASC,  
    34.     [AIR_FROM_CITY_CODE] ASC,  
    35.     [AIR_TO_CITY_CODE] ASC  
    36. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFSORT_IN_TEMPDB = OFF,   
    37. IGNORE_DUP_KEY = OFFDROP_EXISTING = OFFONLINE = OFFALLOW_ROW_LOCKS  = ON,   
    38. ALLOW_PAGE_LOCKS  = ON)   
    39. GO  

    接着我们来创建分区方案

    1. CREATE PARTITION SCHEME [FromCityCodePartition] AS PARTITION [FromCityCodePartitionFunction] TO ([CITY04], [CITY05], [CITY06], [CITY07], [CITY07], [CITY07], [CITY07], [CITY08], [CITY08], [CITY08], [CITY08], [CITY01], [CITY02], [CITY03], [PRIMARY])  
    2. GO  

    接着创建分区函数

    1. CREATE PARTITION FUNCTION [FromCityCodePartitionFunction](datetime) AS RANGE LEFT FOR VALUES (N'2011-03-15T00:00:00.000', N'2011-03-20T00:00:00.000', N'2011-03-25T00:00:00.000', N'2011-03-30T00:00:00.000', N'2011-04-05T00:00:00.000', N'2011-04-10T00:00:00.000', N'2011-04-15T00:00:00.000', N'2011-04-20T00:00:00.000', N'2011-04-25T00:00:00.000', N'2011-04-30T00:00:00.000', N'2011-05-01T00:00:00.000', N'2011-05-03T00:00:00.000', N'2011-05-05T00:00:00.000', N'2011-05-07T00:00:00.000')  
    2. GO  

    到这里部分哥们可能要问了:这些CITY04,CITY05等是什么?这些呢是数据库的文件组啦。。上图

    数据库文件组

    如果还不清楚的话,哥就把数据库的创建脚本也贴上。。。

    1. CREATE DATABASE [Demo] ON  PRIMARY   
    2. NAME = N'Demo'FILENAME = N'D:/EMS_DATA/Demo.mdf' , SIZE = 234880KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    3.  FILEGROUP [CITY01]   
    4. NAME = N'CITY01'FILENAME = N'E:/AirData/CITY01.ndf' , SIZE = 3072KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    5.  FILEGROUP [CITY02]   
    6. NAME = N'CITY02'FILENAME = N'E:/AirData/CITY02.ndf' , SIZE = 3072KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    7.  FILEGROUP [CITY03]   
    8. NAME = N'CITY03'FILENAME = N'F:/AirData/CITY03.ndf' , SIZE = 3072KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    9.  FILEGROUP [CITY04]   
    10. NAME = N'CITY04'FILENAME = N'F:/AirData/CITY04.ndf' , SIZE = 333824KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    11.  FILEGROUP [CITY05]   
    12. NAME = N'CITY05'FILENAME = N'D:/AirData/CITY05.ndf' , SIZE = 330880KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    13.  FILEGROUP [CITY06]   
    14. NAME = N'CITY06'FILENAME = N'D:/AirData/CITY06.ndf' , SIZE = 330176KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    15.  FILEGROUP [CITY07]   
    16. NAME = N'CITY07'FILENAME = N'D:/AirData/CITY07.ndf' , SIZE = 981120KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ),   
    17.  FILEGROUP [CITY08]   
    18. NAME = N'CITY08'FILENAME = N'D:/AirData/CITY08.ndf' , SIZE = 651840KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB )  
    19.  LOG ON   
    20. NAME = Demo_log', FILENAME = N'D:/EMS_DATA/Demo.ldf' , SIZE = 4672KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)  
    21. GO  

    好了,到这里我们就开始创建分区了。。。

    1. BEGIN TRANSACTION  
    2. CREATE PARTITION FUNCTION [FromCityCodePartitionFunction](datetime) AS RANGE LEFT FOR VALUES (  
    3. N'2011-03-01T00:00:00',  
    4. N'2011-03-05T00:00:00',  
    5. N'2011-03-10T00:00:00',  
    6. N'2011-03-15T00:00:00',  
    7. N'2011-03-20T00:00:00',  
    8. N'2011-03-25T00:00:00',  
    9. N'2011-03-30T00:00:00',  
    10. N'2011-04-05T00:00:00',  
    11. N'2011-04-10T00:00:00',  
    12. N'2011-04-15T00:00:00',   
    13. N'2011-04-20T00:00:00',  
    14. N'2011-04-25T00:00:00',  
    15. N'2011-04-30T00:00:00')  
    16.   
    17.   
    18. CREATE PARTITION SCHEME [FromCityCodePartition] AS PARTITION [FromCityCodePartitionFunction] TO (  
    19. [CITY01], [CITY01], [CITY01], [CITY01],   
    20. [CITY02], [CITY02], [CITY02], [CITY02],   
    21. [CITY03], [CITY03], [CITY03], [CITY03],   
    22. [CITY03], [CITY04], [CITY04], [CITY04],   
    23. [PRIMARY])  
    24.   
    25.   
    26. ALTER TABLE BA_CACHE_AIR_RESULT DROP constraint PK_AIR_ID  
    27. --创建主键,但不设为聚集索引     
    28. ALTER TABLE BA_CACHE_AIR_RESULT ADD CONSTRAINT PK_AIR_ID PRIMARY KEY NONCLUSTERED     
    29. (     
    30.     AIR_ID ASC     
    31. ) ON [PRIMARY]  
    32.   
    33. CREATE CLUSTERED INDEX [ClusteredIndex_on_FromCityCodePartition_634352976321562500] ON [dbo].[BA_CACHE_AIR_RESULT]   
    34. (  
    35.     [AIR_FROM_DATETIME]  
    36. )WITH (SORT_IN_TEMPDB = OFFIGNORE_DUP_KEY = OFFDROP_EXISTING = OFFONLINE = OFF) ON [FromCityCodePartition]([AIR_FROM_DATETIME])  
    37.   
    38.   
    39. DROP INDEX [ClusteredIndex_on_FromCityCodePartition_634352976321562500] ON [dbo].[BA_CACHE_AIR_RESULT] WITH ( ONLINE = OFF )  
    40.   
    41.   
    42. COMMIT TRANSACTION  

    等待这个执行完毕后。。

    我们就通过这个SQL语句来查看各分区的情况了。。。

    1. SELECT PARTITION = $PARTITION.FROMCITYCODEPARTITIONFUNCTION(AIR_FROM_DATETIME)  
    2.      ,ROWS      = COUNT(*)  
    3.      ,MINMINVAL    = MIN(AIR_FROM_DATETIME)  
    4.      ,MAXMAXVAL    = MAX(AIR_FROM_DATETIME)  
    5.  FROM DBO.BA_CACHE_AIR_RESULT  
    6. GROUP BY $PARTITION.FROMCITYCODEPARTITIONFUNCTION(AIR_FROM_DATETIME)  
    7. ORDER BY PARTITION  
    8. O  

    大功告成。。。

  • 相关阅读:
    外键的三种形式
    MySQl创建用户和授权
    Django模板系统
    Django 简介
    jQuery
    JavaScript的BOM和DOM
    JS中的关键字和保留字
    Git 源码管理工具简单入门
    Git使用
    常见的三种SQL分页方式
  • 原文地址:https://www.cnblogs.com/fx2008/p/2280316.html
Copyright © 2011-2022 走看看