亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Sql Server 分區(qū)表

Ccoffee
2024年7月18日 15:54 本文熱度 2368

1. 分區(qū)表簡介

  分區(qū)表在邏輯上是一個表,而物理上是多個表。從用戶角度來看,分區(qū)表和普通表是一樣的。使用分區(qū)表的主要目的是為改善大型表以及具有多個訪問模式的表的可伸縮性和可管理性。

  分區(qū)表是把數(shù)據(jù)按設(shè)定的標準劃分成區(qū)域存儲在不同的文件組中,使用分區(qū)可以快速而有效管理和訪問數(shù)據(jù)子集。

1.1> 適合做分區(qū)表的情況

  ◊ 數(shù)據(jù)庫中某個表的數(shù)據(jù)很多,在查詢數(shù)據(jù)時會明顯感覺到速度很慢,這個時候需要考慮分區(qū)表;

  ◊ 數(shù)據(jù)是分段的,如以年份為分隔的數(shù)據(jù),對于當年的數(shù)據(jù)經(jīng)常進行增刪改查操作,而對于往年的數(shù)據(jù)幾乎不做操作或只做查詢操作,這種情況可以使用分區(qū)表。對數(shù)據(jù)的操作如果只涉及一部分數(shù)據(jù)而不是全部數(shù)據(jù)的情況可以考慮分區(qū)表,如果一張表的數(shù)據(jù)經(jīng)常使用且不管年份之類的因素經(jīng)常對其增刪改查操作則最好不要分區(qū)。

1.2> 分區(qū)表的優(yōu)點

  ◊ 分區(qū)表可以從物理上將一個大表分成幾個小表,但是從邏輯上來看還是一個大表。

  ◊ 對于具有多個CPU的系統(tǒng),分區(qū)可以對表的操作通過并行的方式進行,可以提升訪問性能。

2. 創(chuàng)建分區(qū)表步驟

  創(chuàng)建分區(qū)表的步驟分為5步:

  (1)創(chuàng)建數(shù)據(jù)庫文件組

 ?。?)創(chuàng)建數(shù)據(jù)庫文件

  (3)創(chuàng)建分區(qū)函數(shù)

 ?。?)創(chuàng)建分區(qū)方案

 ?。?)創(chuàng)建分區(qū)表

2.1> 創(chuàng)建數(shù)據(jù)庫文件組

  新建示例數(shù)據(jù)庫Northwind,創(chuàng)建數(shù)據(jù)庫文件組和文件,添加文件組。

  

2.2> 創(chuàng)建數(shù)據(jù)庫文件

  創(chuàng)建數(shù)據(jù)文件,并為數(shù)據(jù)文件分配文件組。

  

  完成創(chuàng)建后的數(shù)據(jù)庫文件信息

  

  通過SQL Server Profiler可以看到具體的創(chuàng)建數(shù)據(jù)庫的腳本如下:

CREATE DATABASE [Northwind]
 CONTAINMENT = NONE ON  PRIMARY ( NAME = N'Northwind', FILENAME = N'F:\Database\Northwind\Northwind.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 
 FILEGROUP [SECTION2010] ( NAME = N'Northwind_Data_2010', FILENAME = N'F:\Database\Northwind\Northwind_Data_2010.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 
 FILEGROUP [SECTION2011] ( NAME = N'Northwind_Data_2011', FILENAME = N'F:\Database\Northwind\Northwind_Data_2011.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 
 FILEGROUP [SECTION2012] ( NAME = N'Northwind_Data_2012', FILENAME = N'F:\Database\Northwind\Northwind_Data_2012.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 
 FILEGROUP [SECTION2013] ( NAME = N'Northwind_Data_2013', FILENAME = N'F:\Database\Northwind\Northwind_Data_2013.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ), 
 FILEGROUP [SECTION2014] ( NAME = N'Northwind_Data_2014', FILENAME = N'F:\Database\Northwind\Northwind_Data_2014.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) 
LOG ON ( NAME = N'Northwind_log', FILENAME = N'F:\Database\Northwind\Northwind_log.ldf' , SIZE = 2048KB , FILEGROWTH = 10%)

查看數(shù)據(jù)庫文件組SQL語句:

2.3> 創(chuàng)建分區(qū)函數(shù)

  創(chuàng)建分區(qū)函數(shù)Transact-SQL語法:

CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )AS RANGE [ LEFT | RIGHT ] 
FOR VALUES ( [ boundary_value [ ,...n ] ] ) 
[ ; ]

參數(shù):  

  partition_function_name:分區(qū)函數(shù)的名稱。 分區(qū)函數(shù)名稱在數(shù)據(jù)庫內(nèi)必須唯一,并且符合標識符的規(guī)則。

  input_parameter_type:用于分區(qū)的列的數(shù)據(jù)類型。 當用作分區(qū)列時,除 text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、別名數(shù)據(jù)類型或 CLR 用戶定義數(shù)據(jù)類型外,所有數(shù)據(jù)類型均有效。

  boundary_value:為使用 partition_function_name 的已分區(qū)表或索引的每個分區(qū)指定邊界值。 如果 boundary_value 為空,則分區(qū)函數(shù)使 partition_function_name 將整個表或索引映射到單個分區(qū)。 只能使用 CREATE TABLE 或 CREATE INDEX 語句中指定的一個分區(qū)列。

  LEFT | RIGHT 指定當間隔值由 數(shù)據(jù)庫引擎 按升序從左到右排序時,boundary_value [ ,...n ] 屬于每個邊界值間隔的哪一側(cè)(左側(cè)還是右側(cè))。 如果未指定,則默認值為 LEFT。

  示例:創(chuàng)建將用于Order表的分區(qū)函數(shù)

CREATE PARTITION FUNCTION Function_DateTime ( DATETIME )
AS RANGE RIGHT
FOR VALUES('2011-01-01', '2012-01-01', '2013-01-01', '2014-01-01')

完成創(chuàng)建分區(qū)函數(shù)之后,可以通過以下SQL語句查看已創(chuàng)建的分區(qū)函數(shù)情況。

SELECT * FROM sys.partition_functions

2.4> 創(chuàng)建分區(qū)方案

  分區(qū)方案的作用是將分區(qū)函數(shù)生成的分區(qū)映射到文件組中去,分區(qū)方案是讓SQL Server將已分區(qū)的數(shù)據(jù)放在哪個文件組中。

  在當前數(shù)據(jù)庫中創(chuàng)建一個將已分區(qū)表或已分區(qū)索引的分區(qū)映射到文件組的方案。 已分區(qū)表或已分區(qū)索引的分區(qū)的個數(shù)和域在分區(qū)函數(shù)中確定。 必須首先在 CREATE PARTITION FUNCTION 語句中創(chuàng)建分區(qū)函數(shù),然后才能創(chuàng)建分區(qū)方案。

  創(chuàng)建分區(qū)方案的Transact-SQL語法:

CREATE PARTITION SCHEME partition_scheme_nameAS PARTITION partition_function_name[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )[ ; ]

參數(shù):

  partition_scheme_name:分區(qū)方案的名稱。 分區(qū)方案名稱在數(shù)據(jù)庫中必須是唯一的,并且符合標識符規(guī)則。

  partition_function_name:使用分區(qū)方案的分區(qū)函數(shù)的名稱。 分區(qū)函數(shù)所創(chuàng)建的分區(qū)將映射到在分區(qū)方案中指定的文件組。 partition_function_name 必須已經(jīng)存在于數(shù)據(jù)庫中。 單個分區(qū)不能同時包含 FILESTREAM 和非 FILESTREAM 文件組。

  ALL:指定所有分區(qū)都映射到在 file_group_name 中提供的文件組,或映射到主文件組(如果指定了 [PRIMARY]。 如果指定了 ALL,則只能指定一個 file_group_name。

  file_group_name | [ PRIMARY ] [ ,...n]:指定用來持有由 partition_function_name 指定的分區(qū)的文件組的名稱。 file_group_name 必須已經(jīng)存在于數(shù)據(jù)庫中。
  如果指定了 [PRIMARY],則分區(qū)將存儲于主文件組中。 如果指定了 ALL,則只能指定一個 file_group_name。 分區(qū)分配到文件組的順序是從分區(qū) 1 開始,按文件組在 [,...n] 中列出的順序進行分配。 在 [,...n] 中,可以多次指定同一個 file_group_name。 如果 n 不足以擁有在 partition_function_name 中指定的分區(qū)數(shù),則 CREATE PARTITION SCHEME 將失敗,并返回錯誤。
  如果 partition_function_name 生成的分區(qū)數(shù)少于文件組數(shù),則第一個未分配的文件組將標記為 NEXT USED,并且出現(xiàn)顯示命名 NEXT USED 文件組的信息。 如果指定了 ALL,則單獨的 file_group_name 將為該 partition_function_name 保持它的 NEXT USED 屬性。 如果在 ALTER PARTITION FUNCTION 語句中創(chuàng)建了一個分區(qū),則 NEXT USED 文件組將再接收一個分區(qū)。 若要再創(chuàng)建一個未分配的文件組來擁有新的分區(qū),請使用 ALTER PARTITION SCHEME。
  在 file_group_name[ 1,...n] 中指定主文件組時,必須像在 [PRIMARY] 中那樣分隔 PRIMARY,因為它是關(guān)鍵字。

 

  示例:創(chuàng)建將用于Order表的分區(qū)方案

CREATE PARTITION SCHEME Scheme_DateTime
AS PARTITION Function_DateTime
TO ( SECTION2010, SECTION2011, SECTION2012, SECTION2013, SECTION2014 )

分區(qū)函數(shù)和分區(qū)方案創(chuàng)建之后,可以在數(shù)據(jù)庫的【存儲】中查看:

  通過可以通過以下SQL語句查看已創(chuàng)建的分區(qū)方案:

SELECT * FROM sys.partition_schemes

2.5> 創(chuàng)建分區(qū)表

CREATE TABLE [Order](
    OrderID INT IDENTITY(1,1) NOT NULL,
    UserID INT NOT NULL,
    TotalAmount DECIMAL(18,2) NULL,
    OrderDate DATETIME NOT NULL) ON Scheme_DateTime ( OrderDate )

這里需要注意分區(qū)表不能再創(chuàng)建聚集索引,因為聚集索引可以將記錄在物理上順序存儲,而分區(qū)表是將數(shù)據(jù)存儲在不同的表中,這兩個概念是沖突的,所以在創(chuàng)建分區(qū)表時不能再創(chuàng)建聚集索引。

  完成Order表創(chuàng)建之后,查看表的屬性,可以看到Order表已經(jīng)是分區(qū)表。

3. 操作分區(qū)表

3.1> Insert數(shù)據(jù)

USE [Northwind]

GO

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (1 ,10.00 ,'2009-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (1 ,20.50 ,'2009-12-31');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (2 ,40.00 ,'2010-01-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (3 ,40.00 ,'2010-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (4 ,50.00 ,'2011-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (5 ,60.00 ,'2012-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (5 ,60.00 ,'2012-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (6 ,70.00 ,'2013-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (10 ,90.00 ,'2014-10-20');

INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (9 ,100.00 ,'2015-10-20');

GO

3.2> 查詢數(shù)據(jù)所在物理分區(qū)表

  在分區(qū)表中使用一般的SELECT語句無法知道數(shù)據(jù)是分別存放在哪幾個不同的物理表中,若要知道數(shù)據(jù)分別存放的物理表,可以使用$PARTITION函數(shù),該函數(shù)可以調(diào)用分區(qū)函數(shù)并返回數(shù)據(jù)所在物理分區(qū)的編號。

  $PARTITION的語法:$PARTITION.分區(qū)函數(shù)名(表達式)

SELECT $PARTITION.Function_DateTime('2010-01-01')

  查詢結(jié)果分區(qū)函數(shù)返回為1,說明2010-01-01的數(shù)據(jù)會存放在第1個物理分區(qū)表中。

  使用$PARTITION函數(shù)可以具體知道每個物理分區(qū)表中存放了哪些記錄。

  查看物理分區(qū)表中存放的記錄:

SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 1

SELECT $PARTITION.Function_DateTime(OrderDate) AS 分區(qū)編號, COUNT(1) AS 記錄數(shù) 
FROM [Order]GROUP BY $PARTITION.Function_DateTime(OrderDate)

3.3> 修改分區(qū)表數(shù)據(jù)

UPDATE dbo.[Order] SET OrderDate='2015-01-01' WHERE OrderID = 3

4. 將普通表轉(zhuǎn)換為分區(qū)表

  一般的普通表都是在主鍵上建聚集索引,記錄的物理保存位置由主鍵決定。

  示例:創(chuàng)建一個Product普通表

CREATE TABLE Product
(
    ProductID INT IDENTITY(1,1) NOT NULL,
    ProductName VARCHAR(100) NOT NULL,
    UnitPrice DECIMAL(18,2) NULL,
    CreateDate DATETIME NOT NULL,    CONSTRAINT PK_Product PRIMARY KEY CLUSTERED (ProductID)
)
USE [Northwind]
GO
INSERT INTO [dbo].[Product] ([ProductName],[UnitPrice],[CreateDate]) VALUES ('LINQ to SQL' ,10 ,'2012-01-01');
INSERT INTO [dbo].[Product] ([ProductName],[UnitPrice],[CreateDate]) VALUES ('LINQ to XML' ,10 ,'2012-12-01');
INSERT INTO [dbo].[Product] ([ProductName],[UnitPrice],[CreateDate]) VALUES ('LINQ to Object' ,10 ,'2013-02-01');
INSERT INTO [dbo].[Product] ([ProductName],[UnitPrice],[CreateDate]) VALUES ('LINQ to ADO.NET' ,10 ,'2014-01-02');
INSERT INTO [dbo].[Product] ([ProductName],[UnitPrice],[CreateDate]) VALUES ('LINQ to Entity' ,10 ,'2015-01-01');
GO

查看表Product的屬性:

  查看表Product的索引,可以看到PK_Product為聚集索引。

  將普通表轉(zhuǎn)換為分區(qū)表的操作是先在普通表上刪除聚集索引,在創(chuàng)建一個新的聚集索引,在該聚集索引中使用分區(qū)方案。

  在SQL Server中,主鍵字段上默認創(chuàng)建聚集索引,刪除主鍵的聚集索引。

ALTER TABLE Product DROP CONSTRAINT PK_Product

重新創(chuàng)建主鍵非聚集索引

ALTER TABLE Product ADD CONSTRAINT PK_Product PRIMARY KEY NONCLUSTERED (ProductID ASC)

重新創(chuàng)建后的主鍵:

  創(chuàng)建使用分區(qū)方案的聚集索引:

CREATE CLUSTERED INDEX IX_CreateDate ON Product ( CreateDate )ON Scheme_DateTime ( CreateDate )

調(diào)整后的Product表屬性:

  調(diào)整后Product表記錄的物理保存情況:

5. 刪除(合并)一個分區(qū)表

  刪除2012-01-01的分區(qū),修改分區(qū)函數(shù):

ALTER PARTITION FUNCTION Function_DateTime() MERGE RANGE ('2012-01-01')

在修改了分區(qū)函數(shù)之后,與之關(guān)聯(lián)的分區(qū)方案也將同時自動調(diào)整。在執(zhí)行了上面合并分區(qū)的函數(shù)之后,查看分區(qū)方案的Create腳本。

CREATE PARTITION SCHEME [Scheme_DateTime] AS PARTITION [Function_DateTime] TO ([SECTION2010], [SECTION2011], [SECTION2013], [SECTION2014])

合并分區(qū)之后,被合并的分區(qū)記錄也將被重新分配物理保存位置。

6. 添加分區(qū)

  分區(qū)方案中指定的文件組個數(shù)比分區(qū)函數(shù)中指定的邊界數(shù)大1,為分區(qū)方案指定一個可用的文件組時,該分區(qū)方案并沒有立刻使用這個文件組,只是將文件組先備用著,等修改了分區(qū)函數(shù)之后分區(qū)方案才會使用這個文件組。如果分區(qū)函數(shù)沒有更改,分區(qū)方案中的文件組個數(shù)也不會更改。

   添加分區(qū)所需要使用到的文件組可以使用之前合并分區(qū)之后沒有再使用的SECTION2012,也可以新建文件組。

ALTER DATABASE [Northwind] ADD FILEGROUP [SECTION2015]
ALTER DATABASE [Northwind] ADD FILE ( 
    NAME = N'Northwind_Data_2015', 
    FILENAME = N'F:\Database\Northwind\Northwind_Data_2015.ndf' , 
    SIZE = 5120KB , 
    FILEGROWTH = 1024KB 
) TO FILEGROUP [SECTION2015]

為分區(qū)方案指定一個可用的文件組:

ALTER PARTITION SCHEME Scheme_DateTime NEXT USED [SECTION2015]

修改分區(qū)函數(shù),添加分區(qū):

ALTER PARTITION FUNCTION Function_DateTime() SPLIT RANGE('2015-01-01')

查看添加分區(qū)后的數(shù)據(jù)物理存儲:


該文章在 2024/7/22 11:27:07 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved