基于列/ id的最后一位的Mysql表分区

时间:2014-02-17 19:16:26

标签: mysql partitioning

我想根据员工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 ...(不喜欢这个)

虽然检索和插入时间决不会增强,但可维护性会因巨大因素而增加,谢谢

编辑:

如何根据员工的最后一位数

指定分区标准

2 个答案:

答案 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