如果您决定按第一个字母来做,我认为RANGE partitioning可以做到这一点。但是,如果您对第一个字母的分区没有绝对要求,则LINEAR KEY partitioning可能会更好。
下面是我从选址手册页解除和修改为使用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]
我没有看到RANGE分区的任何语法除了数字和日期以外的任何东西。我认为线性键可能是唯一的选择... – jswolf19 2011-03-23 15:47:39
谢谢汤姆,这是接近我所需要的,但是我需要它作用于fname的子字符串(仅第一个字符),并且LESS THAN不是贪婪就足够了,因为我希望它只是该分区中的那封信,所以平等可能更合适。 – alphadevx 2011-03-23 16:46:40
任何小于'b'的东西都将以'a'开头。之后,小于'c'的任何内容都将以'b'开头。等等...这让你按第一个字母进行分区,但仍然允许查询优化器在给出'fname ='albert''时执行它的操作。 – 2011-03-23 16:55:00