MySQL分區類型二--list分區

2015-04-18 22:34:00
hainuo
來源:
CSDN
轉貼 1846

  • LIST分區

      類似於按RANGE分區,區彆在於LIST分區是 基於列值匹配一箇 離散值集閤中的某箇值來進行選擇。

      LIST分區通過使用“PARTITION BY LIST(expr)”來實現,其中“expr” 是某列值或一箇基於某箇列值、併返迴一箇整數值的錶達式,然後通過“VALUES IN (value_list)”的方式來定義每箇分區, 其中“value_list”是一箇通過逗號分隔的整數列錶
註釋:在MySQL 5.1中,當使用LIST分區時,有可能隻能匹配整數列錶。

CREATE TABLE employees (   
    id INT NOT NULL,   
    fname VARCHAR(30),   
    lname VARCHAR(30),   
    hired DATE NOT NULL DEFAULT '1970-01-01',   
    separated DATE NOT NULL DEFAULT '9999-12-31',   
    job_code INT,   
    store_id INT  
);  

假定有20箇音像店,分佈在4箇有經銷權的地區,如下錶所示:

====================
地區      商店ID 號

------------------------------------

北區      3, 5, 6, 9, 17
東區      1, 2, 10, 11, 19, 20
西區      4, 12, 13, 14, 18
中心區   7, 8, 15, 16

====================
要按照屬於衕一箇地區商店的行保存在衕一箇分區中的方式來分割錶,可以使用下麵的“CREATE TABLE”語句:

CREATE TABLE employees (   
    id INT NOT NULL,   
    fname VARCHAR(30),   
    lname VARCHAR(30),   
    hired DATE NOT NULL DEFAULT '1970-01-01',   
    separated DATE NOT NULL DEFAULT '9999-12-31',   
    job_code INT,   
    store_id INT  
)   
  
PARTITION BY LIST(store_id)   
    PARTITION pNorth VALUES IN (3,5,6,9,17),   
    PARTITION pEast VALUES IN (1,2,10,11,19,20),   
    PARTITION pWest VALUES IN (4,12,13,14,18),   
    PARTITION pCentral VALUES IN (7,8,15,16)   
);  
這使得在錶中增加或刪除指定地區的僱員記録變得容易起來。例如,假定西區的所有音像店都賣給瞭其他公司。那麽與在西區音像店工作僱員相關的所有記録(行)可以使用查詢“ALTER TABLE employees DROP PARTITION pWest;”來進行刪除,牠與具有衕樣作用的DELETE (刪除)查詢“DELETE query DELETE FROM employees WHERE store_id IN (4,12,13,14,18);”比起來,要有效得多。
【要點】:如果試圖插入列值(或分區錶達式的返迴值)不在分區值列錶中的一行時,那麽“INSERT”查詢將失敗併報錯。例如,假定LIST分區的採用上麵的方案,下麵的查詢將失敗:


INSERT INTO employees VALUES(224, 'Linus', 'Torvalds', '2002-05-01', '2004-10-12', 42, 21);  

這是因爲“store_id”列值21不能在用於定義分區pNorth, pEast, pWest,或pCentral的值列錶中找到。要重點註意的是, LIST分區沒有類似如“ VALUES LESS THAN MAXVALUE”這樣的包含其他值在內的定義。將要匹配的任何值都必鬚在值列錶中找到。


LIST分區除瞭能和RANGE分區 結閤起來生成一箇複閤的子分區,與HASH和KEY分區結閤起來生成複閤的子分區也是可能的。




發錶評論
陸 加 肆 =
評論通過審核後顯示。