【发布时间】:2012-10-15 21:49:12
【问题描述】:
在几百万行的大表上创建分区时遇到问题。
CREATE TABLE `searcheg`.`pages` (
`urlId` int(9) NOT NULL AUTO_INCREMENT,
`url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`urlhash` binary(16) NOT NULL,<< MD5 unhex.
PRIMARY KEY (`urlId`),
UNIQUE KEY `urlhash` (`urlhash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如何分区? urlhash 必须是唯一的,因为我需要插入大量行并检查重复。由于分区必须包含所有唯一列并且不能是非整数值。分区的一个原因是减少 .ibd 以获得更易于管理的大小,因为它增长超过 50G,我想拆分它们。
urlID 作为主键是为了防止每次插入时行重新排序。
urlhash 是唯一的,以防止重复输入。
我正在寻找一种无需删除主键即可拆分表的方法。
【问题讨论】:
-
我不会使用 md5 进行分区,因为它是一个非常强大但速度较慢的哈希函数。它用于不同的目的。
标签: mysql unique partitioning