MYSQL 5.5分区表由第一个字符0-9a-zA-Z组成

时间:2015-03-31 12:40:25

标签: mysql sql range partitioning

我想在字符字段的第一个字符上创建一个范围分区。该字段包含主题标签值,并且区分大小写 0-9a-zA-Z

我提到了列出的解决方案here

这就是我执行的内容:

CREATE TABLE tweetdbq4(hashtag CHAR(50), timestamp CHAR(14), tweetid BIGINT(18) UNSIGNED, userid INT(10) UNSIGNED) ENGINE=MYISAM 
PARTITION BY RANGE COLUMNS(hashtag) (
    PARTITION p0 VALUES LESS THAN ('a'),
    PARTITION p1 VALUES LESS THAN ('b'),
    PARTITION p2 VALUES LESS THAN ('c'),
    PARTITION p3 VALUES LESS THAN ('d'),
    PARTITION p4 VALUES LESS THAN ('e'),
    PARTITION p5 VALUES LESS THAN ('f'),
    PARTITION p6 VALUES LESS THAN ('g'),
    PARTITION p7 VALUES LESS THAN ('h'),
    PARTITION p8 VALUES LESS THAN ('i'),
    PARTITION p9 VALUES LESS THAN ('j'),
    PARTITION p10 VALUES LESS THAN ('k'),
    PARTITION p11 VALUES LESS THAN ('l'),
    PARTITION p12 VALUES LESS THAN ('m'),
    PARTITION p13 VALUES LESS THAN ('n'),
    PARTITION p14 VALUES LESS THAN ('o'),
    PARTITION p15 VALUES LESS THAN ('p'),
    PARTITION p16 VALUES LESS THAN ('q'),
    PARTITION p17 VALUES LESS THAN ('r'),
    PARTITION p18 VALUES LESS THAN ('s'),
    PARTITION p19 VALUES LESS THAN ('t'),
    PARTITION p20 VALUES LESS THAN ('u'),
    PARTITION p21 VALUES LESS THAN ('v'),
    PARTITION p22 VALUES LESS THAN ('w'),
    PARTITION p23 VALUES LESS THAN ('x'),
    PARTITION p24 VALUES LESS THAN ('y'),
    PARTITION p25 VALUES LESS THAN ('z'),
    PARTITION p26 VALUES LESS THAN ('A'),
    PARTITION p27 VALUES LESS THAN ('B'),
    PARTITION p28 VALUES LESS THAN ('C'),
    PARTITION p29 VALUES LESS THAN ('D'),
    PARTITION p30 VALUES LESS THAN ('E'),
    PARTITION p31 VALUES LESS THAN ('F'),
    PARTITION p32 VALUES LESS THAN ('G'),
    PARTITION p33 VALUES LESS THAN ('H'),
    PARTITION p34 VALUES LESS THAN ('I'),
    PARTITION p35 VALUES LESS THAN ('J'),
    PARTITION p36 VALUES LESS THAN ('K'),
    PARTITION p37 VALUES LESS THAN ('L'),
    PARTITION p38 VALUES LESS THAN ('M'),
    PARTITION p39 VALUES LESS THAN ('N'),
    PARTITION p40 VALUES LESS THAN ('O'),
    PARTITION p41 VALUES LESS THAN ('P'),
    PARTITION p42 VALUES LESS THAN ('Q'),
    PARTITION p43 VALUES LESS THAN ('R'),
    PARTITION p44 VALUES LESS THAN ('S'),
    PARTITION p45 VALUES LESS THAN ('T'),
    PARTITION p46 VALUES LESS THAN ('U'),
    PARTITION p47 VALUES LESS THAN ('V'),
    PARTITION p48 VALUES LESS THAN ('W'),
    PARTITION p49 VALUES LESS THAN ('X'),
    PARTITION p50 VALUES LESS THAN ('Y'),
    PARTITION p51 VALUES LESS THAN ('Z'),
    PARTITION p52 VALUES LESS THAN MAXVALUE
);

我收到此错误

ERROR 1493 (HY000): VALUES LESS THAN value must be strictly increasing for each partition

通过执行PARTITION p0 VALUES LESS THAN ('a'),它会将分区存储在从0到9开始的值上吗?

你能告诉我我做错了什么吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为你使用范围进行分区,你有大写和小写字母。你需要删除一个,因为范围不能使用相同的字符。

答案 1 :(得分:1)

计划A:使用COLLATION标记以#{1}}结尾的标签,而不是_bin。 " CI"表示不区分大小写。那是' a'和' A'被视为平等。

计划B:仅使用26 + 1个分区,而不是52 + 1。

你为什么要参加派对?为了表现?您可能无法获得任何性能提升。让我们看看您认为会加速的查询;我将解释为什么PARTITION会或(更有可能)不会帮助。

无关:为什么_citimestamp而不是CHAR(14)? CHAR(14)需要14或42个字节;时间戳需要4或5.较小的磁盘占用空间可以带来更好的性能。

无关:主题标签是否正好是50个字符?如果没有,请使用VARCHAR,而不是CHAR。如果你认为"固定"更好,我会解释那是一个老妻子的故事。

无关:请TIMESTAMP查看您拥有的SHOW CREATE TABLE。然后考虑一下hashtags是否应该是utf8。