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

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

Sql Server 分區(qū)表

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

1. 分區(qū)表簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

  (4)創(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)必須唯一,并且符合標(biāo)識(shí)符的規(guī)則。

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

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

  LEFT | RIGHT 指定當(dāng)間隔值由 數(shù)據(jù)庫引擎 按升序從左到右排序時(shí),boundary_value [ ,...n ] 屬于每個(gè)邊界值間隔的哪一側(cè)(左側(cè)還是右側(cè))。 如果未指定,則默認(rèn)值為 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ù)放在哪個(gè)文件組中。

  在當(dāng)前數(shù)據(jù)庫中創(chuàng)建一個(gè)將已分區(qū)表或已分區(qū)索引的分區(qū)映射到文件組的方案。 已分區(qū)表或已分區(qū)索引的分區(qū)的個(gè)數(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ù)庫中必須是唯一的,并且符合標(biāo)識(shí)符規(guī)則。

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

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

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

  通過可以通過以下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)建聚集索引,因?yàn)榫奂饕梢詫⒂涗浽谖锢砩享樞虼鎯?chǔ),而分區(qū)表是將數(shù)據(jù)存儲(chǔ)在不同的表中,這兩個(gè)概念是沖突的,所以在創(chuàng)建分區(qū)表時(shí)不能再創(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ù)是分別存放在哪幾個(gè)不同的物理表中,若要知道數(shù)據(jù)分別存放的物理表,可以使用$PARTITION函數(shù),該函數(shù)可以調(diào)用分區(qū)函數(shù)并返回?cái)?shù)據(jù)所在物理分區(qū)的編號(hào)。

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

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

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

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

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

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

SELECT $PARTITION.Function_DateTime(OrderDate) AS 分區(qū)編號(hào), 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)建一個(gè)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)建一個(gè)新的聚集索引,在該聚集索引中使用分區(qū)方案。

  在SQL Server中,主鍵字段上默認(rèn)創(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. 刪除(合并)一個(gè)分區(qū)表

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

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

在修改了分區(qū)函數(shù)之后,與之關(guān)聯(lián)的分區(qū)方案也將同時(shí)自動(dòng)調(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ū)方案中指定的文件組個(gè)數(shù)比分區(qū)函數(shù)中指定的邊界數(shù)大1,為分區(qū)方案指定一個(gè)可用的文件組時(shí),該分區(qū)方案并沒有立刻使用這個(gè)文件組,只是將文件組先備用著,等修改了分區(qū)函數(shù)之后分區(qū)方案才會(huì)使用這個(gè)文件組。如果分區(qū)函數(shù)沒有更改,分區(qū)方案中的文件組個(gè)數(shù)也不會(huì)更改。

   添加分區(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ū)方案指定一個(gè)可用的文件組:

ALTER PARTITION SCHEME Scheme_DateTime NEXT USED [SECTION2015]

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

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

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


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