2010-09-20 66 views
6

是否可以根據char列進行分區?如何根據char列對MySQL表進行分區?

查看MySQL 5.1文檔後,似乎只能使用整數類型。

這是正確的嗎?或者我可以使用一些函數將char轉換爲整數?

問題中的char字段包含唯一標識符。

回答

15

MySQL 5.1中的分區只能處理整數列(Source)。您只能在非整數列上使用few partitioning functions。例如:

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE) 
    ENGINE=INNODB 
    PARTITION BY HASH(MONTH(tr_date)) 
    PARTITIONS 6; 

您還可以在MySQL 5.1中使用key partitioning,只要主鍵包括在表的分區函數的所有列:在MySQL 5.5

CREATE TABLE k1 (
    id CHAR(3) NOT NULL PRIMARY KEY, 
    value int 
) 
PARTITION BY KEY(id) 
PARTITIONS 10; 

。另一方面, ,您可以在各種數據類型(包括基於字符的列)上使用range column partitioninglist column partitioning

列表列實施例:

CREATE TABLE expenses (
    expense_date DATE NOT NULL, 
    category VARCHAR(30), 
    amount DECIMAL (10,3) 
); 

ALTER TABLE expenses 
PARTITION BY LIST COLUMNS (category) 
(
    PARTITION p01 VALUES IN ('lodging', 'food'), 
    PARTITION p02 VALUES IN ('flights', 'ground transportation'), 
    PARTITION p03 VALUES IN ('leisure', 'customer entertainment'), 
    PARTITION p04 VALUES IN ('communications'), 
    PARTITION p05 VALUES IN ('fees') 
); 

範圍列實施例:

CREATE TABLE range_test (
    code CHAR(3), 
    value INT 
) 
PARTITION BY RANGE COLUMNS(code) (
    PARTITION p0 VALUES LESS THAN ('MMM'), 
    PARTITION p1 VALUES LESS THAN ('ZZZ') 
); 

進一步閱讀:

+0

謝謝 - 我主要看HASH/LIST。 – 2010-09-20 16:54:02

0

你希望做什麼用的分區來獲得? HASH和LIST不太可能提供任何性能增益。對少於一百萬行的表進行分區很少有用。

上分區的其他評論:http://mysql.rjweb.org/doc.php/partitionmaint

5.6和5.7具有的限制放寬一些提到在其他的答案,但依然是分區很少超過索引更好。

相關問題