化背景如何决定MySQL 5.5中的varchar分区范围?
我有一个非常大的表,表就是这样
CREATE TABLE tb_doc (
did mediumint(8) unsigned NOT NULL auto_increment,
title varchar(80) NOT NULL default '',
...,
PRIMARY KEY (did),
KEY title (title)
)
TYPE=MyISAM;
类型标题为varchar(80),大部分时间标题将是纯数字串状'111111','2222222','44444444',有时它会是utf-8字符串,如'3a','a4'或'中国'(中文字符)。
我已经使用HASH(做)做分区,但我的SELECT语句时总是喜欢
SELECT did, title,... FROM tb_doc WHERE title= '1111111';
SELECT did, title,... FROM tb_doc WHERE title= '2222222';
所以我想用标题做分区,希望这会更快。现在问题出现了。
实验
我用下面的语句:
PARTITION BY RANGE COLUMNS (title)(
PARTITION p00 VALUES LESS THAN (1), # not pure number strings
PARTITION p01 VALUES LESS THAN (500000), # pure number strings from 1 to 500k
PARTITION p02 VALUES LESS THAN (1000000), # pure number strings from 500k to 1000k
PARTITION p03 VALUES LESS THAN (1500000), # pure number strings from 1000k to 1500k
.......... # ......
PARTITION pn VALUES LESS THAN (25000000), # the biggest number now
)
;
类似的问题
我读了以下两个Q &作为: Partitioning a database table in MySQL How to Partitioning a table using a LIKE criteria in Mysql 但它们对于英语 世界,不适合我的情况。
问题
- 使用标题做分区是更好的,对不对?
- 你能给我一个“utf-8”范围的例子吗? 我尝试'500000','1000000',...,但他们不工作。
- 如果我使用tb_doc WHERE标题='12345'中的SELECT xxx,请仅从第一部分获取数据?
- 这张表是〜50GB,有多少分区是最佳的?
在此先感谢您。