7

我知道从 MySQL 5.5 开始,您现在可以按非整数值(如 varchar)对表进行分区。我有一个表,我在其中对单个 varchar 列执行大量查找,因此出于性能原因我想对其进行分区。

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

我想做的是按存储的每个单词中的第一个字母对该表进行分区,因此所有以“a”开头的单词都进入第一个分区,“b”进入第二个分区,依此类推。

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

有没有人使用 MySQL 5.5 做过类似的事情?

4

1 回答 1

9

如果您决心通过第一个字母来做,我认为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
);

并运行它:

... 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]
于 2011-03-23T15:39:59.320 回答