使用資料分割檢視

資料分割檢視可讓大型資料表的資料分割成較小的成員資料表。資料將基於某個資料行的資料數值範圍而分割於成員資料表之間。每個成員資料表的資料範圍定義於所指定的分割資料行內的 CHECK 條件約束中。接著再定義使用 UNION ALL 來將所有成員資料表之選取項目合併成一個結果集的檢視。當參考檢視的 SELECT 陳述式在分割資料行上指定一個搜尋條件時,查詢最佳化工具將使用 CHECK 條件約束定義來決定哪個成員資料表將包含資料列。

[!附註]

在伺服器本機分割資料的慣用方法是透過資料分割資料表。如需詳細資訊,請參閱<資料分割資料表及索引>。

例如,記錄 1998 年銷售狀況的銷售資料表已分割成 12 個成員資料表,一個成員資料表代表一個月。每個成員資料表都有一個定義於 OrderMonth 資料行的條件約束:

CREATE TABLE May1998sales
   (OrderID      INT,
   CustomerID      INT      NOT NULL,
   OrderDate      DATETIME      NULL
      CHECK (DATEPART(yy, OrderDate) = 1998),
   OrderMonth      INT
      CHECK (OrderMonth = 5),
   DeliveryDate      DATETIME      NULL
      CHECK(DATEPART(mm, DeliveryDate) = 5)
   CONSTRAINT OrderIDMonth PRIMARY KEY(OrderID, OrderMonth)
   )

填入 May1998sales 的應用程式必須確認所有資料列的 OrderMonth 資料行都為 5,並且所指定的訂購日期都為 1998 年 5 月內的日期。這將由定義於資料表內的條件約束來強制執行。

接著會再定義一個檢視,它使用了 UNION ALL 來從所有的 12 個成員資料表內選取資料,做為單一的結果集:

CREATE VIEW Year1998Sales
AS
SELECT * FROM Jan1998Sales
UNION ALL
SELECT * FROM Feb1998Sales
UNION ALL
SELECT * FROM Mar1998Sales
UNION ALL
SELECT * FROM Apr1998Sales
UNION ALL
SELECT * FROM May1998Sales
UNION ALL
SELECT * FROM Jun1998Sales
UNION ALL
SELECT * FROM Jul1998Sales
UNION ALL
SELECT * FROM Aug1998Sales
UNION ALL
SELECT * FROM Sep1998Sales
UNION ALL
SELECT * FROM Oct1998Sales
UNION ALL
SELECT * FROM Nov1998Sales
UNION ALL
SELECT * FROM Dec1998Sales

例如,下列 SELECT 陳述式查詢關於特定月份的資訊。

SELECT *
FROM Year1998Sales
WHERE OrderMonth IN (5,6) AND CustomerID = 64892

SQL Server 查詢最佳化工具將會知道此 SELECT 陳述式內的搜尋條件只參考 May1998Sales 與 Jun1998Sales 資料表內的資料列。因此,它會限制只搜尋那些資料表。

若要對資料分割檢視執行更新,分割資料行必須是基底資料表主索引鍵的一部分。如果檢視無法更新,您可以在允許更新的檢視上建立一個 INSTEAD OF 觸發程序。您應該將錯誤處理設計到觸發程序中,以確保不會插入重複的資料列。若需在檢視中設計 INSTEAD OF 觸發程序的範例,請參閱<設計 INSTEAD OF 觸發程序>。

您無須用到 CHECK 條件約束,即可讓資料分割檢視傳回正確的結果。不過,若未定義 CHECK 條件約束,查詢最佳化工具必須搜尋所有資料表,而非只有涵蓋分割資料行之搜尋條件的資料表。若沒有 CHECK 條件約束,檢視的運作方式將與包含 UNION ALL 的任何其他檢視一樣。查詢最佳化工具並不能對儲存於不同資料表的值作任何假設,而且它不能省略搜尋參與於檢視定義內的資料表。

若資料分割檢視所參考的所有成員資料表都位於相同的伺服器內,檢視將為本機的資料分割檢視。若成員資料表位於多個伺服器上,檢視即是分散式資料分割檢視。分散式資料分割檢視可將系統的資料庫處理負載分散到伺服器群組上。如需詳細資訊,請參閱<聯盟資料庫伺服器>。

資料分割檢視可讓您更輕鬆獨立地維護成員資料表。例如,您可以在某個期間的端點執行下列動作:

  • 目前結果的資料分割檢視定義可變更成加入最新的期間,並卸除最舊的期間。

  • 過去結果的資料分割檢視定義可變更成加入剛剛從目前結果檢視中卸除的期間。過去結果檢視也可更新成移除與封存所涵蓋的最舊期間。

當您將資料插入資料分割檢視之後,sp_executesql 系統預存程序可用來建立包含執行計畫的 INSERT 陳述式,此執行計畫擁有相當大的機會與許多並行使用者在系統內重複使用。

[!附註]

bcp 命令和 BULK INSERT 與 INSERT ... SELECT * FROM OPENROWSET(BULK...) 陳述式都不支援大量匯入資料分割檢視。不過,您可以使用 INSERT 陳述式,將多個資料列插入資料分割檢視中。