MySQL 5.5分区表由AZ提供

alp*_*evx 6 mysql database-partitioning

据我所知,从MySQL 5.5开始,您现在可以通过非整数值(如varchar)对表进行分区.我有一个表,我在一个varchar列上执行了很多查找,因此出于性能原因我想对其进行分区.

在所有情况下,列的值都是单个字母单词(严格小写的az,由验证强制执行).

我想要做的是用存储的每个单词的第一个字母来分隔这个表,所以所有以'a'开头的单词都在第一个分区中,'b'在第二个分区中等等.

我的直觉是我可能构造create/alter table语句来使用LIKE语句,但我不确定语法.

有没有人使用MySQL 5.5做过这样的事情?

Tom*_*ine 7

如果你决定用第一个字母来做,我认为RANGE分区可以解决问题.但是,如果您对第一个字母的分区没有绝对要求,则LINEAR KEY分区可能会更好.

这是我从手册页面中提取并修改为使用varchar列的示例:

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT NOT NULL,
    store_id INT NOT NULL
)
PARTITION BY RANGE COLUMNS(fname) (
    PARTITION p0 VALUES LESS THAN ('h'),
    PARTITION p1 VALUES LESS THAN ('m'),
    PARTITION p2 VALUES LESS THAN ('t'),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);
Run Code Online (Sandbox Code Playgroud)

运行它:

... Physical database connection acquired for: Feynman
 12:33:07  [CREATE - 0 row(s), 0.062 secs]  Command processed. No rows were affected
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.062/0.000 sec  [0 successful, 1 warnings, 0 errors]
Run Code Online (Sandbox Code Playgroud)