是否可以根據char列進行分區?如何根據char列對MySQL表進行分區?
查看MySQL 5.1文檔後,似乎只能使用整數類型。
這是正確的嗎?或者我可以使用一些函數將char轉換爲整數?
問題中的char字段包含唯一標識符。
是否可以根據char列進行分區?如何根據char列對MySQL表進行分區?
查看MySQL 5.1文檔後,似乎只能使用整數類型。
這是正確的嗎?或者我可以使用一些函數將char轉換爲整數?
問題中的char字段包含唯一標識符。
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 partitioning或list 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')
);
進一步閱讀:
你希望做什麼用的分區來獲得? HASH和LIST不太可能提供任何性能增益。對少於一百萬行的表進行分區很少有用。
上分區的其他評論:http://mysql.rjweb.org/doc.php/partitionmaint
5.6和5.7具有的限制放寬一些提到在其他的答案,但依然是分區很少超過索引更好。
謝謝 - 我主要看HASH/LIST。 – 2010-09-20 16:54:02