我想根据员工ID的最后一位创建分区, 即
all ids ending with 0 go to first partition
,
ending with 1 go to second partition and so on..
这样我想创建10个分区,员工ID可以是int或varchar,这对分区来说既简单又快捷。
目前我们有10个单独的表employee_01,employee_02 ...(不喜欢这个)
虽然检索和插入时间决不会增强,但可维护性会因巨大因素而增加,谢谢
编辑:
如何根据员工的最后一位数
指定分区标准答案 0 :(得分:4)
我想知道在创建分区时是否允许使用mod函数,我是使用
完成的CREATE TABLE ti (id INT, amount DECIMAL(7,2))
ENGINE=INNODB
PARTITION BY HASH( MOD(id,10) )
PARTITIONS 10;
这创建了10个分区,每个id在其分区中以与id
的最后一个数字相同的数字结尾我添加了几行
INSERT INTO ti VALUES (23123,343.22);
INSERT INTO ti VALUES (23123,343.22);
INSERT INTO ti VALUES (23144,343.22);
INSERT INTO ti VALUES (23114,343.22);
INSERT INTO ti VALUES (23124,343.22);
INSERT INTO ti VALUES (23166,343.22);
INSERT INTO ti VALUES (23116,343.22);
INSERT INTO ti VALUES (23112,343.22);
INSERT INTO ti VALUES (23199,343.22);
然后测试了它
SELECT
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
FROM
INFORMATION_SCHEMA.partitions
WHERE
TABLE_SCHEMA = SCHEMA()
AND TABLE_NAME='ti';
输出:
part expr descr table_rows
p0 MOD(id,10) \N 0
p1 MOD(id,10) \N 0
p2 MOD(id,10) \N 1
p3 MOD(id,10) \N 2
p4 MOD(id,10) \N 3
p5 MOD(id,10) \N 0
p6 MOD(id,10) \N 2
p7 MOD(id,10) \N 0
p8 MOD(id,10) \N 0
p9 MOD(id,10) \N 1
正是我想要的,感谢指向正确的链接Incognito,但你的回答是错误的,也许你误解了它
答案 1 :(得分:0)
您将无法根据EmployeeID的最后一位进行分区,因为这意味着您需要首先使用substring函数来检索最后一位数,但由于功能上的限制,您无法执行此操作可用于分区条款。
MySQL允许一个明确的函数列表,从版本5.1.12开始,列出here。