環境 產品:DB2 UDB
平台:跨平台
版本:v8
問題 介紹 DB2 分區式數據庫中分區鍵的概念,選擇原則,以及如果實現分區鍵的更改。
解答 在 DB2 UDB 中分區鍵是指一個列(或一組列),用於確定將某行數據存儲在哪個分區上。分區鍵是使用 CREATE TABLE 語句在創建表時定義的。當某個表所屬的表空間分布在包含有多個分區的數據庫分區組中時,如果未對該表定義分區鍵,缺省情況下將會使用主鍵的第一列創建分區鍵;若未指定主鍵,則缺省分區鍵是在該表中定義的第一個非長型字段列。( 長型包括所有長型數據類型和所有大對象(LOB)數據類型)。
如果創建的表所屬的表空間位於單分區數據庫中,而用戶需要使用分區鍵時,則必須顯式定義分區鍵,否則缺省情況下不創建它。只有在單分區數據庫分區組中才允許創建不帶分區鍵的表。以後可以使用 ALTER TABLE 語句添加或刪除分區鍵,但只能對其表空間與單分區數據庫分區組相關聯的表進行該操作。
好的表分區鍵就是能將數據均勻分布在數據庫分區組中的所有數據庫分區上的分區鍵。因此在定義分區鍵時,應該考慮下列幾點:
·不支持創建只包含長型數據類型(LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 或 DBCLOB)的多分區表。
·不能改變分區鍵定義。
·分區鍵應該包括最頻繁連接的列。
·分區鍵應該由經常參與 GROUP BY 子句的列組成。
·任何唯一鍵或主鍵必須包含所有分區鍵列。
·在聯機事務處理(OLTP)環境中,分區鍵中的所有列都應該通過使用帶常量或主機變量的等於(=)謂詞來參與事務。例如,假定有一個在事務中經常使用的職員號 emp_no,如:
UPDATE emp_table SET ... WHERE emp_no = host-variable
在此情況下,EMP_NO 列對於 EMP_TABLE 而言就是一個不錯的單列分區鍵。
應該在創建表時選擇創建恰當的分區鍵,否則一旦數據加載入庫,再試圖更改分區鍵,操作上會比較麻煩,其大致過程如下:
對表空間位於單分區數據庫分區組的表進行分區鍵的更改:
1. 使用 ALTER TABLE ... DROP PARTITIONING KEY 的語句,刪除現有分區鍵。
2. 使用 ALTER TABLE ... ADD PARTITIONING KEY 的語句,創建另一個分區鍵。
注:只能在單分區數據庫分區組中的表上執行上述更改分區鍵的語句。
對表空間位於多分區數據庫分區組的表進行分區鍵的更改:
在多分區數據庫環境下將不能使用 ALTER TABLE 語句更改分區鍵,不過可采用以下提供的兩種方法:
1. 將所有數據導出至單分區數據庫分區組中,然後利用上述單分區數據庫分區鍵更改的步驟進行操作。
2. 導出表中所有數據,刪除該表,重新創建表並重新定義分區鍵,然後導入所有數據。
由於這兩種方法都不適用於大數據庫;因此,再次建議用戶在實現大數據庫的設計之前,就應考慮選擇合適的列定義分區鍵。收藏地址:http://www.cncms.com.cn/db2/q372742.Html