如果您決定按第一個字母來做,我認爲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