當前位置:首頁 » 編程語言 » sqlserver2008分區表

sqlserver2008分區表

發布時間: 2024-11-28 13:41:58

A. sqlserver中分表和分庫有什麼區別

MS SQL Server:分區表、分區索引 詳解

1. 分區表簡介
使用分區表的主要目的,是為了改善大型表以及具有各種訪問模式的表的可伸縮性和可管理性。

 大型表:數據量巨大的表。
 訪問模式:因目的不同,需訪問的不同的數據行集,每種目的的訪問可以稱之為一種訪問模式。

分區一方面可以將數據分為更小、更易管理的部分,為提高性能起到一定的作用;另一方面,對於如果具有多個CPU的系統,分區可以是對表的操作通過並行的方式進行,這對於提升性能是非常有幫助的。

注意:只能在 SQL Server Enterprise Edition 中創建分區函數。只有 SQL Server Enterprise Edition 支持分區。
2. 創建分區表或分區索引的步驟
可以分為以下步驟:
1. 確定分區列和分區數
2. 確定是否使用多個文件組
3. 創建分區函數
4. 創建分區架構(Schema)
5. 創建分區表
6. 創建分區索引

下面詳細描述的創建分區表、分區索引的步驟。
2.1. 確定分區列和分區數
在開始做分區操作之前,首先要確定待分區表的訪問模式,該模式決定了什麼列適合做分區鍵。例如,對於銷售數據,一般會先根據日期把數據范圍限定在一個范圍內,然後在這個基礎上做進一步的查詢,這樣,就可以把日期作為分區列。

確定了分區列之後,需要進一步確定分區數,亦即分區表中需要包含多少數據,每個分區的數據應該限定在哪個范圍。

2.2. 確定是否使用多個文件組
為了有助於優化性能和維護,應該使用文件組分離數據。一般情況下,如果經常對分區的整個數據集操作,則文件組數最好與分區數相同,並且這些文件組通常應該位於不同的磁碟上,再配合多個CPU,則SQL Server 可以並行處理多個分區,從而大大縮短處理大量復雜報表和分析的總體時間。

2.3. 創建分區函數
分區函數用於定義分區的邊界條件,創建分區函數的語法如下:
CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ]
FOR VALUES ( [ boundary_value [ ,...n ] ] )
[ ; ]

參數說明:
 partition_function_name
是分區函數的名稱。分區函數名稱在資料庫內必須唯一,並且符合標識符的規則。

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

實際列(也稱為分區列)是在 CREATE TABLE 或 CREATE INDEX 語句中指定的。

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

boundary_value 是可以引用變數的常量表達式。這包括用戶定義類型變數,或函數以及用戶定義函數。它不能引用 Transact-SQL 表達式。boundary_value 必須與 input_parameter_type 中提供的數據類型相匹配或者可隱式轉換為該數據類型,並且如果該值的大小和小數位數與 input_parameter_type 中相應的值的大小和小數位數不匹配,則在隱式轉換過程中該值不能被截斷。

注意:
如果 boundary_value 包含 datetime 或 smalldatetime 文字值,則為這些文字值在計算時假設 us_english 是會話語言。不推薦使用此行為。要確保分區函數定義對於所有會話語言都具有預期的行為,建議使用對於所有語言設置都以相同方式進行解釋的常量,例如 yyyymmdd 格式;或者將文字值顯式轉換為特定樣式。有關詳細信息,請參閱編寫國際化 Transact-SQL 語句。若要確定伺服器的語言會話,請運行 SELECT @@LANGUAGE。

 ...n
指定 boundary_value 提供的值的數目,不能超過 999。所創建的分區數等於 n + 1。不必按順序列出各值。如果值未按順序列出,則 Microsoft SQL Server 2005 資料庫引擎將對它們進行排序,創建函數並返回一個警告,說明未按順序提供值。如果 n 包括任何重復的值,則資料庫引擎將返回錯誤。

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

創建分區函數示例:
CREATE PARTITION FUNCTION PF_Left(int)
AS RANGE LEFT
FOR VALUES(10, 20)
GO

CREATE PARTITION FUNCTION PF_Right(int)
AS RANGE LEFT
FOR VALUES(10, 20)
GO

PF_Left 和 PF_Right 分區函數的區分:
分區函數 分區1 分區2 分區3
PF_Left <= 10 > 10 and <= 20 > 20
PF_Right < 10 >= 10 and < 20 >= 20

2.4. 創建分區架構(Schema)
創建分區函數後,必須將其與分區架構(Schema)相關聯,以便將分區定向至特定的文件組。定義分區架構師,即使多個分區位於同一個文件組中,也必須為每個分區指定一個文件組。

創建分區架構的語法如下:
GOCREATE PARTITION SCHEME partition_scheme_name
AS PARTITION partition_function_name
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )
[ ; ]

參數:
 partition_scheme_name
分區方案的名稱。分區方案名稱在資料庫中必須是唯一的,並且符合標識符規則。

 partition_function_name
使用分區方案的分區函數的名稱。分區函數所創建的分區將映射到在分區方案中指定的文件組。partition_function_name 必須已經存在於資料庫中。

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

 file_group_name | [ PRIMARY ] [ ,...n]
指定用來持有由 partition_function_name 指定的分區的文件組的名稱。file_group_name 必須已經存在於資料庫中。

如果指定了 [PRIMARY],則分區將存儲於主文件組中。如果指定了 ALL,則只能指定一個 file_group_name。分區分配到文件組的順序是從分區 1 開始,按文件組在 [,...n] 中列出的順序進行分配。在 [,...n] 中,可以多次指定同一個 file_group_name。如果 n 不足以擁有在 partition_function_name 中指定的分區數,則 CREATE PARTITION SCHEME 將失敗,並返回錯誤。

如果 partition_function_name 生成的分區數少於文件組數,則第一個未分配的文件組將標記為 NEXT USED,並且出現顯示命名 NEXT USED 文件組的信息。如果指定了 ALL,則單獨的 file_group_name 將為該 partition_function_name 保持它的 NEXT USED 屬性。如果在 ALTER PARTITION FUNCTION 語句中創建了一個分區,則 NEXT USED 文件組將再接收一個分區。若要再創建一個未分配的文件組來擁有新的分區,請使用 ALTER PARTITION SCHEME。

在 file_group_name[ 1,...n] 中指定主文件組時,必須像在 [PRIMARY] 中那樣分隔 PRIMARY,因為它是關鍵字。

創建分區架構示例:
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
GO
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg);
GO

2.5. 創建分區表
定義了分區函數(邏輯結構)和分區架構(物理結構)後,既可以創建分區表來利用它們。分區表定義應使用的分區架構,而分區架構又定義其使用的分區函數。要將這三者結合起來,必須指定應用於分區函數的列 。范圍分區始終只映射到表中的一列。

CREATE TABLE 語法如下:
CREATE TABLE
[ database_name . [ schema_name ] . | schema_name . ] table_name
( { <column_definition> | <computed_column_definition> }
[ <table_constraint> ] [ ,...n ] )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup
| "default" } ]
[ { TEXTIMAGE_ON { filegroup | "default" } ]
[ ; ]

示例如下:
CREATE TABLE myRangePT1
(
ID int not null,
AGE int,
PRIMARY KEY (ID)
) ON myRangePS1(myRangePF1)
GO

2.6. 創建分區索引
索引對於提高查詢性能非常有效,因此,一般應該考慮應該考慮為分區表建立索引,為分區表建立索引與為普通表建立索引的語法一直,但是,其行為與普通索引有所差異。

默認情況下,分區表中創建的索引使用與分區表相同分區架構和分區列,這樣,索引將於表對齊。將表與其索引對齊,可以使管理工作更容易進行,對於滑動窗口方案尤其如此。若要啟動分區切換,表的所有索引都必須對齊。

在創建索引時,也可以指定不同的分區方案(Schema)或單獨的文件組(FileGroup)來存儲索引,這樣SQL Server 不會將索引與表對齊。

在已分區的表上創建索引(分區索引)時,應該注意以下事項:
 唯一索引
建立唯一索引(聚集或者非聚集)時,分區列必須出現在索引列中。此限制將使SQL Server只調查單個分區,並確保表中寵物的新鍵值。如果分區依據列不可能包含在唯一鍵中,則必須使用DML觸發器,而不是強制實現唯一性。

 非唯一索引
對非唯一的聚集索引進行分區時,如果未在聚集鍵中明確指定分區依據列,默認情況下SQL Server 將在聚集索引列中添加分區依據列。
對非唯一的非聚集索引進行分區時,默認情況下SQL Server 將分區依據列添加為索引的包含性列,以確保索引與基表對齊,若果索引中已經存在分區依據列,SQL Server 將不會像索引中添加分區依據列。

3. 分區操作
分區適用於可以縮放的大型表,所以隨著時間和環境的變化,就會產生對分區的拆分、合並、移動的需求。
3.1. 拆分與合並分區
通過拆分或合並邊界值更改分區函數。通過執行 ALTER PARTITION FUNCTION,可以將使用分區函數的任何錶或索引的某個分區拆分為兩個分區,也可以將兩個分區合並為一個分區。

注意:多個表或索引可以使用同一分區函數。ALTER PARTITION FUNCTION 在單個事務中影響所有這些表或索引。

ALTER PARTITION FUNCTION 語法如下:
ALTER PARTITION FUNCTION partition_function_name()
{
SPLIT RANGE ( boundary_value )
| MERGE RANGE ( boundary_value )
} [ ; ]

參數說明:
 partition_function_name
要修改的分區函數的名稱。

 SPLIT RANGE ( boundary_value )
在分區函數中添加一個分區。boundary_value 確定新分區的范圍,因此它必須不同於分區函數的現有邊界范圍。根據 boundary_value,Microsoft SQL Server 2005 資料庫引擎將某個現有范圍拆分為兩個范圍。在這兩個范圍中,新 boundary_value 所在的范圍被視為是新分區。

重要提示:
文件組必須處於聯機狀態,並且必須由使用此分區函數的分區方案標記為 NEXT USED,以保存新分區。在 CREATE PARTITION SCHEME 語句中,將把文件組分配給分區。如果 CREATE PARTITION SCHEME 語句分配了多餘的文件組(在 CREATE PARTITION FUNCTION 語句中創建的分區數少於用於保存它們的文件組),則存在未分配的文件組,分區方案將把其中的某個文件組標記為 NEXT USED。該文件組將保存新的分區。如果分區方案未將任何文件組標記為 NEXT USED,則必須使用 ALTER PARTITION SCHEME 添加一個文件組或指定一個現有文件組來保存新分區。可以指定已保存分區的文件組來保存附加分區。由於一個分區函數可以參與多個分區方案,因此所有使用分區函數(您向其中添加了分區)的分區方案都必須擁有一個 NEXT USED 文件組。否則,ALTER PARTITION FUNCTION 將失敗並出現錯誤,該錯誤顯示缺少 NEXT USED 文件組的一個或多個分區方案。

 MERGE [ RANGE ( boundary_value) ]
刪除一個分區並將該分區中存在的所有值都合並到剩餘的某個分區中。RANGE (boundary_value) 必須是一個現有邊界值,已刪除分區中的值將合並到該值中。如果最初保存 boundary_value 的文件組沒有被剩餘分區使用,也沒有使用 NEXT USED 屬性進行標記,則將從分區方案中刪除該文件組。合並的分區駐留在最初不保存 boundary_value 的文件組中。boundary_value 是一個可以引用變數(包括用戶定義類型變數)或函數(包括用戶定義函數)的常量表達式。它無法引用 Transact-SQL 表達式。boundary_value 必須匹配或可以隱式轉換為其對應列的數據類型,並且當值的大小和小數位數不匹配其對應 input_parameter_type 時,將無法在隱式轉換過程中被截斷。

B. sqlserver分區表類型

1. 分區表簡介
分區表在邏輯上是一個表,而物理上是多個表。從用戶角度來看,分區表和普通表是一樣的。使用分區表的主要目的是為改善大型表以及具有多個訪問模式的表的可伸縮性和可管理性。
分區表是把數據按設定的標准劃分成區域存儲在不同的文件組中,使用分區可以快速而有效管理和訪問數據子集。
1.1> 適合做分區表的情況
◊ 資料庫中某個表的數據很多,在查詢數據時會明顯感覺到速度很慢,這個時候需要考慮分區表;
◊ 數據是分段的,如以年份為分隔的數據,對於當年的數據經常進行增刪改查操作,而對於往年的數據幾乎不做操作或只做查詢操作,這種情況可以使用分區表。對數據的操作如果只涉及一部分數據而不是全部數據的情況可以考慮分區表,如果一張表的數據經常使用且不管年份之類的因素經常對其增刪改查操作則最好不要分區。
1.2> 分區表的優點
◊ 分區表可以從物理上將一個大表分成幾個小表,但是從邏輯上來看還是一個大表。
◊ 對於具有多個CPU的系統,分區可以對表的操作通過並行的方式進行,可以提升訪問性能。

2. 創建分區表步驟
創建分區表的步驟分為5步:
(1)創建資料庫文件組
(2)創建資料庫文件
(3)創建分區函數
(4)創建分區方案
(5)創建分區表

C. sqlserver查看哪些表有分區

SQLSERVER中,有時需要知道已經建了哪些分區表,從哪裡看?
1、直接用SQL語句查:
--分區數大於1的,就是我們想查看的分區表:
SELECT p.*,'|' AS SP ,t.* FROM sys.partitions AS p
inner JOIN sys.tables AS t ON p.object_id = t.object_id
inner join (
select object_id as object_id2,index_id, count(*) AS CNT FROM sys.partitions
group by object_id,index_id
having count(*)>1
) s on s.object_id2 = p.object_id
WHERE p.partition_id IS NOT NULL
order by t.name;

2、在管理器中查看:
Databases > [資料庫名稱] 節點 > 存儲(Storage) 節點 >
\ 分區架構(Partition Schemes ) 節點 > 選中一項 > 右鍵 > 查看依賴
\ 分區函數(Partition Functions ) 節點 > 選中一項 > 右鍵 > 生成腳本
3、有作多分區的表,屬性的 存儲(Storage) 會有 Partitioning 信息。

D. sql server 2008的版本功能

SQL Server 2008出現在微軟數據平台願景上是因為它使得公司可以運行他們最關鍵任務的應用程序,同時降低了管理數據基礎設施和發送觀察和信息給所有用戶的成本。
這個平台有以下特點:
· 可信任的——使得公司可以以很高的安全性、可靠性和可擴展性來運行他們最關鍵任務的應用程序。
· 高效的——使得公司可以降低開發和管理他們的數據基礎設施的時間和成本。
· 智能的——提供了一個全面的平台,可以在你的用戶需要的時候給他發送觀察和信息。 一、可信任的
在今天數據驅動的世界中,公司需要繼續訪問他們的數據。SQL Server 2008為關鍵任務應用程序提供了強大的安全特性、可靠性和可擴展性。
(一)保護你的信息
在過去的SQL Server 2005的基礎之上,SQL Server 2008做了以下方面的增強來擴展它的安全性:
簡單的數據加密
SQL Server 2008可以對整個資料庫、數據文件和日誌文件進行加密,而不需要改動應用程序。進行加密使公司可以滿足遵守規范和及其關注數據隱私的要求。簡單的數據加密的好處包括使用任何范圍或模糊查詢搜索加密的數據、加強數據安全性以防止未授權的用戶訪問、還有數據加密。這些可以在不改變已有的應用程序的情況下進行。
外鍵管理
SQL Server 2008為加密和密鑰管理提供了一個全面的解決方案。為了滿足不斷發展的對數據中心的信息的更強安全性的需求,公司投資給供應商來管理公司內的安全密鑰。SQL Server 2008通過支持第三方密鑰管理和硬體安全模塊(HSM)產品為這個需求提供了很好的支持。
增強了審查
SQL Server 2008使你可以審查你的數據的操作,從而提高了遵從性和安全性。審查不只包括對數據修改的所有信息,還包括關於什麼時候對數據進行讀取的信息。SQL Server 2008具有像伺服器中加強的審查的配置和管理這樣的功能,這使得公司可以滿足各種規范需求。SQL Server 2008還可以定義每一個資料庫的審查規范,所以審查配置可以為每一個資料庫作單獨的制定。為指定對象作審查配置使審查的執行性能更好,配置的靈活性也更高。
(二)確保業務可持續性
有了SQL Server 2008,微軟繼續使公司具有提供簡化了管理並具高可靠性的應用的能力。
改進了資料庫鏡像
SQL Server 2008基於SQL Server 2005,並提供了更可靠的加強了資料庫鏡像的平台。新的特性包括:
· 頁面自動修復。SQL Server 2008通過請求獲得一個從鏡像合作機器上得到的出錯頁面的重新拷貝,使主要的和鏡像的計算機可以透明的修復數據頁面上的823和824錯誤。
· 提高了性能。SQL Server 2008壓縮了輸出的日誌流,以便使資料庫鏡像所要求的網路帶寬達到最小。
· 加強了可支持性
(1) SQL Server 2008包括了新增加的執行計數器,它使得可以更細粒度的對資料庫管理系統(Database Management Syste,DBMS)日誌記錄的不同階段所耗費的時間進行計時。
(2) SQL Server 2008包括動態管理視圖(Dynamic Management View)和對現有的視圖的擴展,以此來顯示鏡像會話的更多信息。
熱添加CPU
為了在線添加內存資源而擴展SQL Server中的已有的支持,熱添加CPU使資料庫可以按需擴展。事實上,CPU資源可以添加到SQL Server 2008所在的硬體平台上而不需要停止應用程序。
(三)最佳的和可預測的系統性能
公司在面對不斷增長的壓力,要提供可預計的響應和對隨著用戶數目的增長而不斷增長的數據量進行管理。SQL Server 2008提供了一個廣泛的功能集合,使你的數據平台上的所有工作負載的執行都是可擴展的和可預測的。
性能數據的採集
性能調整和排除故障對於管理員來說是耗費時間的工作。為了給管理員提供全面的執行洞察力,SQL Server 2008推出了范圍更大的數據採集,一個用於存儲性能數據的新的集中的資料庫,以及新的報表和監控工具。
擴展事件
SQL Server擴展事件是一個用於伺服器系統的一般的事件處理系統。擴展事件基礎設施是一個輕量級的機制,它支持對伺服器運行過程中產生的事件的捕獲、過濾和響應。這個對事件進行響應的能力使用戶可以通過增加前後文關聯數據,例如Transact SQL對所有事件調用堆棧或查詢計劃句柄,以此來快速的診斷運行時問題。事件捕獲可以按幾種不同的類型輸出,包括Windows事件跟蹤(Event Tracing for Windows,ETW)。當擴展事件輸出到ETW時,操作系統和應用程序就可以關聯了,這使得可以作更全面的系統跟蹤。
備份壓縮
保持在線進行基於磁碟的備份是很昂貴而且很耗時的。有了SQL Server 2008備份壓縮,需要的磁碟I/O 減少了,在線備份所需要的存儲空間也減少了,而且備份的速度明顯加快了。
數據壓縮
改進的數據壓縮使數據可以更有效的存儲,並且降低了數據的存儲要求。數據壓縮還為大型的限制輸入/輸出的工作負載例如數據倉庫提供了顯著的性能改進。
資源監控器
SQL Server 2008隨著資源監控器的推出使公司可以提供持續的和可預測的響應給終端用戶。資源監控器使資料庫管理員可以為不同的工作負載定義資源限制和優先權,這使得並發工作負載可以為終端用戶提供穩定的性能。
穩定的計劃
SQL Server 2008通過提供了一個新的制定查詢計劃的功能,從而提供了更好的查詢執行穩定性和可預測性,使公司可以在硬體伺服器更換、伺服器升級和產品部署中提供穩定的查詢計劃。 二、高效的
SQL Server 2008降低了管理系統、.NET架構和Visual Studio&reg; Team System的時間和成本,使得開發人員可以開發強大的下一代資料庫應用程序。
(一)基於政策的管理
作為微軟正在努力降低公司的總成本所作的工作的一部分,SQL Server 2008推出了陳述式管理架構(DMF),它是一個用於SQL Server資料庫引擎的新的基於策略的管理框架。陳述式管理提供了以下優點:
· 遵從系統配置的政策
· 監控和防止通過創建不符合配置的政策來改變系統
· 通過簡化管理工作來減少公司的總成本
· 使用SQL Server 管理套件查找遵從性問題
DMF是一個基於政策的用於管理一個或多個SQL Server 2008實例的系統。要使用DMF,SQL Server政策管理員使用SQL Server 管理套件創建政策,這些政策管理伺服器上的實體,例如SQL Server的實例、資料庫、和其它SQL Server對象。DMF由三個組件組成:政策管理、創建政策的政策管理員,和顯式管理。管理員選擇一個或多個要管理的對象,並顯式檢查這些對象是否遵守指定的政策,或顯式地使這些對象遵守某個政策。
自動管理
政策管理員使用下面的執行模式之一,使政策自動執行:
· 強制——使用DDL觸發器阻止違反政策的操作
· 對改動進行檢查——當一個與某個政策相關的改動發生時,使用事件通知來評估這個政策
· 檢查時間表——使用一個SQL Server Agent 工作定期的評估一個政策
(二)改進了安裝
SQL Server 2008對SQL Server的服務生命周期提供了顯著的改進,它重新設計了安裝、建立和配置架構。這些改進將計算機上的各個安裝與SQL Server軟體的配置分離開來,這使得公司和軟體合作夥伴可以提供推薦的安裝配置。
(三)加速開發過程
SQL Server提供了集成的開發環境和更高級的數據提取,使開發人員可以創建下一代數據應用程序,同時簡化了對數據的訪問。
ADO .NET實體框架
在資料庫開發人員中的一個趨勢是定義高級的業務對象,或實體,然後他們可以將它們匹配到資料庫中的表和欄位,開發人員使用高級實體例如「客戶」或「訂單」來顯示背後的數據。ADO .NET 實體框架使開發人員可以以這樣的實體來設計關系數據。在這一提取級別的設計是非常高效的,並使開發人員可以充分利用實體關系建模。
語言級集成查詢能力
微軟的語言級集成查詢能力(LINQ)使開發人員可以通過使用管理程序語言例如C#或Visual Basic .NET,而不是SQL語句來對數據進行查詢。LINQ 使可以用.NET 框架語言編寫的無縫和強大的面向集合的查詢運行於ADO. NET(LINQ到SQL), ADO .NET 數據集(LINQ到數據集),ADO .NET 實體框架(LINQ到實體),和到實體數據服務匹配供應商。SQL Server 2008提供了一個新的LINQ到SQL供應商,使得開發人員可以直接將LINQ用於SQL Server 2008的表和欄位。
CLR集成和ADO .NET對象服務
ADO .NET 的對象服務層使得可以進行具體化檢索、改變跟蹤、和實現作為公共語言運行時(CLR)的數據的可持續性。開發人員使用ADO .NET 實體框架可以通過使用由ADO .NET 管理的CLR對象對資料庫進行編程。SQL Server 2008提供了提高性能和簡化開發過程的更有效的和最佳的支持。
Service Broker可擴展性
SQL Server 2008繼續加強了Service Broker 的能力。
· 會話優先權——使你可以配置優先權,使得最重要的數據會第一個被發送和進行處理。
· 診斷工具——診斷工具提高了你開發、配置和管理使用了Service Broker的解決方案的能力,例如在應用程序部署之前診斷分支丟失情況或配置不正確的安全問題。
Transact-SQL的改進
SQL Server 2008通過幾個關鍵的改進增強了Transact-SQL編程人員的開發體驗。
· Table Value Parameters – 在許多客戶的場景中,要傳遞一個表結構的值(行)的集合到伺服器上的一個存儲過程或函數中。這些值可能直接用於插入表或更新表,或者是用於更復雜的數據操作。值為表的參數為定義一個表類型和使應用程序創建、賦值和傳遞表結構的參數到存儲過程和函數中提供了更簡單的方式。
· 對象相關性——對象相關性的改進通過新推出的種類查看和動態管理功能使能夠可靠的找出對象間的相關性。相關性信息總是關於綁定架構和未綁定架構的對象的最新的信息。這個相關性會跟蹤存儲過程、表、視圖、函數、觸發器、用戶定義的類型、XML schema集合和其他對象。
· 日期/時間數據類型——SQL Server 2008推出了新的日期和時間數據類型:
(1) DATE——一個只包含日期的類型,只使用3個位元組來存儲一個日期
(2) TIME——一個只包含時間的類型,只使用3到5個位元組來存儲精確到100納秒時間
(3) DATETIMEOFFSET – 一個可辨別時區的日期/時間類型
(4) DATETIME2 ——一個具有比現有的DATETIME類型更精確的秒和年范圍的日期/時間類型
新的數據類型使應用程序可以有單獨的日期和時間類型,同時為用戶定義的時間值的精度提供較大的數據范圍。
(四)偶爾連接系統
有了移動設備和活動式工作人員,偶爾連接成為了一種工作方式。SQL Server 2008推出了一個統一的同步平台,使得在應用程序、數據存儲和數據類型之間達到一致性同步。在與Visual Studio 的合作下,SQL Server 2008使得可以通過ADO .NET中提供的新的同步服務和Visual Studio中的離線設計器快速的創建偶爾連接系統。SQL Server 2008提供了支持,使得可以改變跟蹤和使客戶可以以最小的執行消耗進行功能強大的執行,以此來開發基於緩存的、基於同步的和基於通知的應用程序。
(五)不只是關系數據
應用程序正在結合使用越來越多的數據類型,而不僅僅是過去資料庫所支持的那些。SQL Server 2008基於過去對非關系數據的強大支持,提供了新的數據類型使得開發人員和管理員可以有效的存儲和管理非結構化數據,例如文檔和圖片。還增加了對管理高級地理數據的支持。除了新的數據類型,SQL Server 2008還提供了一系列對不同數據類型的服務,同時為數據平台提供了可靠性、安全性和易管理性。這篇白皮書的下一章節將介紹非關系數據存儲的一些優點。
HIERARCHY ID
SQL Server 2008使資料庫應用程序以比以前更有效的方式建立樹結構。HierarchyId是一個新的系統類型,它可以存儲一個層次樹中顯示的結點的值。這個新的類型提供了一個靈活的編程模型。它作為一個CLR用戶定義的類型(UDT)來執行,它提供了幾種用於創建和操作層次結點的有效的及有用的內置方法。
FILESTREAM數據
新的SQL Server 2008 FILESTREAM 數據類型使大型的二進制數據,像文檔和圖片等可以直接存儲到一個NTFS文件系統中;文檔和圖片仍然是資料庫的主要組成部分,並維護事務的一致性。
FILESTREAM 使傳統的由資料庫管理的大型二進制數據可以作為單獨的文件存儲在資料庫之外,它們可以通過使用一個NTFS流API進行訪問。使用NTFS流API使普通文件操作可以有效的執行,同時提供所有豐富的資料庫服務,包括安全和備份。
集成的全文檢索
集成的全文檢索使得在全文檢索和關系數據之間可以無縫的轉換,同時使全文索引可以對大型文本欄位進行高速的文本檢索。
稀疏列
這個功能使NULL數據不佔物理空間,從而提供了一個非常有效的管理資料庫中的空數據的方法。例如,稀疏列使得一般包含極多要存儲在一個SQL Server 2008資料庫中的空值的對象模型不會佔用很大的空間。稀疏列還允許管理員創建1024列以上的表。
大型的用戶定義的類型
SQL Server 2008刪除了對用戶定義的類型的8,000位元組的限制,使用戶可以顯著的擴大他們的UDT的規模。
地理信息
SQL Server 2008為在基於空間的應用程序中消耗、擴展和使用位置信息提供了廣泛的空間支持。
· 地理數據類型
這個功能使你可以存儲符合行業空間標準例如開放地理空間聯盟(Open Geospatial Consortium,OGC)的平面的空間數據。這使得開發人員可以通過存儲與設計的平面表面和自然的平面數據例如內部空間等相關聯的多邊形、點和線來實現「平面地球」解決方案。
· 幾何數據類型
這個功能使你可以存儲地理空間數據並對其執行操作。使用緯度和經度的組合來定義地球表面的區域,並結合了地理數據和行業標准橢圓體(例如用於全球GPS解決方案的WGS84)。 三、智能的
商業智能(BI)繼續作為大多數公司投資的關鍵領域和對於公司所有層面的用戶來說的一個無價的信息源。SQL Server 2008提供了一個全面的平台,用於當用戶需要時你可以為其提供智能化。
(一)集成任何數據
公司繼續投資於商業智能和數據倉庫解決方案,以便從他們的數據中獲取商業價值。SQL Server 2008提供了一個全面的和可擴展的數據倉庫平台,它可以用一個單獨的分析存儲進行強大的分析,以滿足成千上萬的用戶在幾兆位元組的數據中的需求。下面是SQL Server 2008中在數據倉庫方面的一些優點。
數據壓縮
數據倉庫中的數據容量隨著操作系統數目的快速增加而在持續增長。內嵌在SQL Server 2008中的數據壓縮使得公司可以更有效的存儲數據,同時還提高了性能,因為降低了I/O 要求。
備份壓縮
保持一直在線做基於磁碟的備份是花費很昂貴的,並且很耗時。有了SQL Server 2008的備份壓縮,保持在線備份所需的存儲降低了,並且備份速度明顯變快了,因為所需要的磁碟I/O 減少了。
分區表並行
分割使公司能夠更有效的管理大型的、不斷增長的數據表,只要簡單的將它們分割為易管理的數據塊。SQL Server 2008是在SQL Server 2005中的分割的優勢之上建立的,它改進了對大型的分區表的操作性能。
星型聯接查詢優化器
SQL Server 2008為普通的數據倉庫場景提供了改進的查詢性能。星型聯接查詢優化器通過辨別數據倉庫連接模式降低了查詢響應時間。
資源監控器
SQL Server 2008隨著資源監控器的推出,使公司可以給終端用戶提供一致的和可預測的響應。資源監控器使公司可以為不同的工作負載定義資源限制和優先權,這使得並發工作負載可以提供穩定的性能。
分組設置
分組設置(GROUPING SETS)是對 GROUP BY 條件語句的擴展,它使得用戶可以在同一個查詢中定義多個分組。分組設置生成一個單獨的結果集,這個結果集相當於對不同分組的行進行了UNION ALL 的操作,這使得聚合查詢和報表更加簡單和快速。
捕獲變更數據
有了捕獲變更數據,變更會被捕獲並被放在變更表中。它捕獲變更的完整內容,維護交叉表的一致性,甚至是對交叉的schema變更也起作用。這使得公司可以將最新的信息集成到數據倉庫中。
MERGESQL語句
有了MERGE SQL 語句,開發人員可以更有效地處理數據倉庫的場景,例如檢查一行數據是否存在然後執行插入或更新。
可擴展的集成服務
集成服務的可擴展性方面的兩個關鍵優勢是:
· SQL Server集成服務 (SQL Server Integration Services,SSIS)管道改進
數據集成包現在可以更有效地擴展、使用有效的資源和管理最大的企業級的工作負載。這個新的設計將運行時間的可擴展性提高到多個處理器中。
· SSIS持久查找
執行查找是最常見的抽取、轉換和載入(ETL)操作。這在數據倉庫中尤為普遍,當實際記錄必須使用查找來轉換業務鍵到它們相應的替代中去時。SSIS 增強了查找的性能以支持大型表。
(二)發送相應的報表
SQL Server 2008提供了一個可擴展的商業智能基礎設施,使得IT人員可以在整個公司內使用商業智能來管理報表以及任何規模和復雜度的分析。SQL Server 2008使得公司可以有效的以用戶想要的格式和他們的地址發送相應的、個人的報表給成千上萬的用戶。通過提供了交互發送用戶需要的企業報表,獲得報表服務的用戶數目大大增加了。這使得用戶可以獲得對他們各自領域的洞察的相關信息的及時訪問,使得他們可以作出更好、更快、更符合的決策。SQL Server 2008使得所有的用戶可以通過下面的報表改進之處來製作、管理和使用報表:
企業報表引擎
有了簡化的部署和配置,可以在企業內部更簡單的發送報表。這使得用戶能夠輕松的創建和共享所有規模和復雜度的報表。
新的報表設計器
改進的報表設計器可以創建廣泛的報表,使公司可以滿足所有的報表需求。獨特的顯示能力使報表可以被設計為任何結構,同時增強的可視化進一步豐富了用戶的體驗。
此外,報表服務2008使商業用戶可以在一個可以使用Microsoft Office的環境中編輯或更新現有的報表,不論這個報表最初是在哪裡設計的,從而使公司能夠從現有的報表中獲得更多的價值。
強大的可視化
SQL Server 2008擴展了報表中可用的可視化組件。可視化工具例如地圖、量表和圖表等使得報表更加友好和易懂。
Microsoft Office渲染
SQL Server 2008提供了新的Microsoft Office渲染,使得用戶可以從Word里直接訪問報表。此外,現有的Excel&reg; 渲染器被極大的增強了,它被用以支持像嵌套數據區域、子報表和合並單元格等功能。這使得用戶可以維護顯示保真度和改進Microsoft Office應用中所創建的報表的全面可用性。
Microsoft SharePoint&reg; 集成
SQL Server 2008報表服務將Microsoft Office SharePoint Server 2007和Microsoft SharePoint Services 深度集成,提供了企業報表和其它商業洞察的集中發送和管理。這使得用戶可以訪問包含了與他們直接在商業門戶中所做的決策相關的結構化和非結構化信息的報表。
(三)使用戶獲得全面的洞察力
及時訪問准確信息,使用戶快速對問題、甚至是非常復雜的問題作出反應,這是在線分析處理的前提(Online Analytical Processing,OLAP)。SQL Server 2008基於SQL Server 2005強大的OLAP能力,為所有用戶提供了更快的查詢速度。這個性能的提升使得公司可以執行具有許多維度和聚合的非常復雜的分析。這個執行速度與Microsoft Office的深度集成相結合,使SQL Server 2008可以讓所有用戶獲得全面的洞察力。SQL Server分析服務具有下面的分析優勢:
設計為可擴展的
SQL Server 2008加強了分析能力和提供了更復雜的計算和聚合,使得能進行的分析更寬廣。新的立方體設計工具幫助用戶將分析基礎設施的開發工作流線化,使他們可以為優化性能建立解決方案。這個設計里內嵌了Best Practice Design Alerts,使得開發人員可以在設計時集成實時警告,這優化了設計。Dimension Designer使得可以簡單的查看和編輯屬性關系,還可以提供多個內置的對理想尺度設計的支持的驗證,而在數據挖掘結構中增強的靈活性使得可以創建多個不同的模型,而不僅僅是過濾數據。
塊計算
塊計算提供了一個在處理性能方面的顯著提高,使得用戶可以增加他們的層級深度和計算的復雜度。
回寫到MOLAP
SQL Server 2008分析服務中的新的基於MOLAP 的回寫功能使得不再需要查詢ROLAP 分區。這給用戶提供了更強的用於分析應用程序中的回寫設定,而不需要以OLAP 性能為代價。
資源監控器
在SQL Server 2008中一個新的資源監控器提供了對資源利用情況的詳細觀察。有了這個資源監控器,資料庫管理員可以快速並輕松的監控和控制分析工作負載,包括識別哪個用戶在運行什麼查詢和他們會運行多久,這使得管理員可以更好的優化伺服器的使用。
預測分析
一個改進的時間序列演算法擴大了預測能力。這個查詢數據挖掘結構的能力使得報表可以很容易的包含從挖掘模型的外部得來的屬性。新的交叉驗證特性對數據進行多處對比,發送給你可靠的結果。這些數據挖掘的改進之處一起為更好的洞察和更豐富的信息提供了機會。

E. 如何對一個已經存在的SQL Server表分區

有兩種方法可以實現對一個表分區.一是創建一個新的標識為分區表的表(你可參照此步驟),然後把數據復制到這張新表,再對這兩張表分別改名.或者,像我寫在下面的,通過重建或創建一個聚集索引來達到分區一個表.
一個SQL Server表和數據進行分區示例
--Table/Index creation
CREATE TABLE [dbo].[TABLE1]
([pkcol] [int] NOT NULL,
[datacol1] [int] NULL,
[datacol2] [int] NULL,
[datacol3] [varchar](50) NULL,
[partitioncol] datetime)
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol)
GO
CREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
-- Populate table data
DECLARE @val INT
SELECT @val=1
WHILE @val < 1000
BEGIN
INSERT INTO dbo.Table1(pkcol, datacol1, datacol2, datacol3, partitioncol)
VALUES (@val,@val,@val,'TEST',getdate()-@val)
SELECT @val=@val+1
END
GO
通過查看sys.partitions系統視圖,上面的代碼創建了一個傳統的單分區表.
SELECT o.name objectname,i.name indexname, partition_id, partition_number, [rows]
FROM sys.partitions p
INNER JOIN sys.objects o ON o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.object_id=p.object_id and p.index_id=i.index_id
WHERE o.name LIKE '%TABLE1%'

objectname

indexname

partition_id

partition_number

rows

TABLE1 PK_TABLE1 72057594042712064 1 999
TABLE1 IX_TABLE1_col2col3 72057594042777600 1 999

創建已分區的SQL Server表
為了創建一個分區表,需要先創建一個分區函數和分區方案. 下面的示例中,將通過datatime欄位對一個表分區. 這里是創建這些對象與在系統視圖中查看這些元數據的代碼.
CREATE PARTITION FUNCTION myDateRangePF (datetime)
AS RANGE RIGHT FOR VALUES ('20110101', '20120101','20130101')
GO
CREATE PARTITION SCHEME myPartitionScheme
AS PARTITION myDateRangePF ALL TO ([PRIMARY])
GO
SELECT ps.name,pf.name,boundary_id,value
FROM sys.partition_schemes ps
INNER JOIN sys.partition_functions pf ON pf.function_id=ps.function_id
INNER JOIN sys.partition_range_values prf ON pf.function_id=prf.function_id
現在我們有一個分區方案,可對表進行分區操作. 既然我們想通過聚集索引來對一個創建了聚集索引的表進行分區,我們需要先刪除掉這個索引並通過一個非聚集索引重建這個約束. 若這張表沒有聚集索引,我們可忽略這一步,直接執行創建聚集索引語句. 類似地,若有一個聚集索引創建在分區欄位上,我們可執行帶DROP_EXISTING的創建聚集索引語句. 最後,若關注於執行此任務時資料庫停止服務時間並且你使用的是SQL Server企業版本,可通過創建索引的ONLINE=ON選項來使資料庫的停止服務時間最小. 記住,在使用ONLINE選項重建索引時,你可能會看到一些性能降低的現象. 這里是一些可能會乃至的腳本.
ALTER TABLE dbo.TABLE1 DROP CONSTRAINT PK_TABLE1
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY NONCLUSTERED (pkcol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE CLUSTERED INDEX IX_TABLE1_partitioncol ON dbo.TABLE1 (partitioncol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON myPartitionScheme(partitioncol)
GO
在這些語句結束後,我們可再次查看sys.partitions系統視圖(看上面的代碼)並確認我們的表有4個分區.

objectname

indexname

partition_id

partition_number

rows

TABLE1 IX_TABLE1_partitioncol 72057594043039744 1 233
TABLE1 IX_TABLE1_partitioncol 72057594043105280 2 365
TABLE1 IX_TABLE1_partitioncol 72057594043170816 3 366
TABLE1 IX_TABLE1_partitioncol 72057594043236352 4 35
TABLE1 IX_TABLE1_col2col3 72057594043301888 1 999
TABLE1 PK_TABLE1 72057594043367424 1 999
SQL Server表和數據示例清除
--cleanup
DROP TABLE TABLE1
DROP PARTITION SCHEME myPartitionScheme
DROP PARTITION FUNCTION myDateRangePF

F. SQLServer2008中的數據壓縮功能

SQL Server SP 為我們帶來了vardecimal功能 這項功能使得原來定長的decimal數據在數據文件中以可變長的格式存儲 據稱這項功能可以為典型的數據倉庫節省 %的空間 而SQL Server 在這一基礎上又進一步增強了數據壓縮功能 SQL Server 現在支持行壓縮和頁面壓縮兩種選項 數據壓縮選項可以在以下對象上啟用

未創建聚簇索引的表

創建聚簇索引的表

非聚簇索引(對表設置壓縮選項不會影響到該表上的非聚簇索引 因此聚簇索引的壓縮需要單獨設置)

索引視圖

分區表和分區索引中的單個分區

為什麼需要數據壓縮

首先可能需要討論的問題就是為什麼在存儲成本不斷降低的今天 微軟還要煞費苦心地在SQL Server中實現並且不斷改進數據壓縮技術呢?

盡管存儲成本已經不再是傳統意義上的首要考慮因素 但是這並不代表資料庫尺寸不是一個問題 因為資料庫尺寸除了會影響到存儲成本之外 還極大地關聯到管理成本和性能問題

首先我們來討論為什麼會有管理成本的問題?因為資料庫需要備份 資料庫的尺寸越大 那麼備份時間就會越長 當然另外一點就是消耗的備份硬體成本也會隨之提高(包括需要的備份介質成本和為了滿足備份窗口而需要更高級的備份設備帶來的采購成本) 還有一種管理成本就是資料庫的維護成本 例如我們經常需要完成的DBCC任務 資料庫尺寸越大 我們就需要更多的時間來完成這些任務

接著我們再看看性能問題 SQL Server在掃描磁碟讀取數據的時候都是按照數據頁為單位進行讀取的 因此如果一張數據頁中包含的數據行數越多 SQL Server在一次數據頁IO中獲得的數據就會越多 這樣也就帶來了性能的提升

最後考慮存儲的成本 按照原先SQL Server SP 中vardecimal的壓縮數據為例 %的空間節省也就意味著 %的存儲成本 而按照SQL Server 當前放出的測試數據 採用新的數據壓縮技術可以達到 X X的存儲率 再加上如果企業要考慮容災而增加的存儲空間 這樣節省的存儲硬體成本也將是想當可觀的

如何使用數據壓縮

SQL Server 中的壓縮選項可以在創建表或索引時通過Option進行設置 例如 CREATE TABLE TestTable (col int col varchar( )) WITH (DATA_PRESSION = ROW);

如果需要改變一個銷滲銷分區虧游的壓縮選項 則可以用以下語句 ALTER TABLE TestTable REBUILD PARTITION = WITH (DATA PRESSION = PAGE);

如果需要為分區表的各個分區設置不同的壓縮選項 可以使用以下的語句 (SQL Server 可以對不同的分區使用不同的壓縮選項 這一點對於數據倉庫應用是非常重要的 因為數據倉庫的事實表通常都會有一個或數個熱分區 這些分區中的數據經常需要更新 為了避免數據壓縮給這些分區上的數據更新帶來額外的處理載荷 可以對這些分區關閉壓縮選項) CREATE TABLE PartitionedTable (col int col varchar( )) ON PS (col )喊冊 WITH ( DATA_PRESSION = ROW ON PARTITIONS( ) DATA_PRESSION = PAGE ON PARTITION( TO ));

如果是為某個索引設置壓縮選項的話 可以使用

CREATE INDEX IX_TestTable_Col ON TestTable (Col ) WITH (DATA_PRESSION = ROW);

如果是修改某個索引的壓縮選項 可以使用 ALTER INDEX IX_TestTable_Col ON TestTable REBUILD WITH (DATA_PRESSION = ROW);

SQL Server 同時還提供了一個名為sp_estimate_data_pression_savings存儲過程幫助DBA估計激活壓縮選項後對象尺寸

數據壓縮是怎樣工作的

對於行壓縮 SQL Server 採用以下三種方法來節省存儲空間

減少了與記錄相關聯的元數據開銷 此元數據為有關列 列長度和偏移量的信息 在某些情況下 元數據開銷可能大於舊的存儲格式

它對於數值類型(例如 integer decimal和float)和基於數值的類型(例如 datetime和money)使用可變長度存儲格式

它通過使用不存儲空字元的可變長度格式來存儲定長字元串

對於頁面壓縮 SQL Server 則是在一張數據頁面上依次採用

行壓縮

前綴壓縮

字典壓縮

配置數據壓縮功能需要注意的

盡管SQL Server 的數據壓縮功能非常有價值 但是仍然需要注意一些問題

數據壓縮功能僅在企業版和開發版中可用

數據壓縮可以讓一張數據頁存儲更多的數據行 但是並不能改變單行數據最長 位元組這一限制

在一張已經設置了數據壓縮的表上創建聚簇索引時 聚簇索引默認繼承原表上的壓縮選項

在未設置聚簇索引的表上設置頁面壓縮時 只有以下情況才會獲得頁面壓縮的實際效果

數據使用BULK INSERT語法添加到表中

數據使用INSERT INTO WITH (TABLOCK)語法添加到表中

執行帶有頁面壓縮選項的ALTER TABLE REBUILD命令

在未設置聚簇索引的表上更改壓縮選項 會導致該表上所有非聚簇索引都需要重建 因為這些非聚簇索引指向的數據行地址已經都發生了改變

在改變壓縮選項時所需要的臨時空間大小與創建索引是所需要的空間是一樣的 因此對於分區表 我們可以逐個分區設置壓縮選項來減少臨時空間的需求壓力

由於SQL Server 中數據壓縮技術其實是SQL Server SP 中vardecimal技術的一個超集 因此設置了數據壓縮後就沒有必要保留vardecimal了 當然SQL Server 為了保持向後兼容性 在當前版本中仍然保留了vardecimal 但是SQL Server 的下一個版本及可能就會棄用vardecimal選項 因此做了這些設置的資料庫應該盡早改變到數據壓縮設置下

lishixin/Article/program/Oracle/201311/17483

熱點內容
訪問跳轉 發布:2024-11-28 15:54:44 瀏覽:697
演算法對算 發布:2024-11-28 15:41:38 瀏覽:3
稱重系統界面如何找配置項 發布:2024-11-28 15:28:29 瀏覽:569
vue能被反編譯嘛 發布:2024-11-28 15:23:59 瀏覽:79
gl和中配哪個配置好 發布:2024-11-28 15:20:01 瀏覽:235
linuxandroid嵌入式 發布:2024-11-28 15:18:58 瀏覽:200
服務密碼是啥有什麼用 發布:2024-11-28 15:08:48 瀏覽:164
編程王國 發布:2024-11-28 15:05:12 瀏覽:977
ftp伺服器對什麼硬體要求高 發布:2024-11-28 14:45:10 瀏覽:650
sql服務管理器下載 發布:2024-11-28 14:45:02 瀏覽:772