0

我现在测试 +10 小时以获得具有主键 (id) 和 bigint 分区的数据库结构。但什么都行不通:/这可能吗?也许任何人都可以给我一个很好的提示;)

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uniqueID` bigint(20) DEFAULT NULL,
  `value` int(11) DEFAULT NULL,
  `m1` text CHARACTER SET utf8,
  `m2` text CHARACTER SET utf8,
  `m3` text CHARACTER SET utf8,
  `m4` text CHARACTER SET utf8,
  `m5` text CHARACTER SET utf8,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniqueID` (`uniqueID`),
  KEY `value` (`value`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
/*!50500 PARTITION BY RANGE  COLUMNS(uniqueID)
(PARTITION p1 VALUES LESS THAN ('0') ENGINE = MyISAM,
 PARTITION p2 VALUES LESS THAN ('1') ENGINE = MyISAM,
 PARTITION p3 VALUES LESS THAN ('2') ENGINE = MyISAM,
 PARTITION p4 VALUES LESS THAN ('3') ENGINE = MyISAM,
 PARTITION p5 VALUES LESS THAN ('4') ENGINE = MyISAM,
 PARTITION p6 VALUES LESS THAN ('5') ENGINE = MyISAM,
 PARTITION p7 VALUES LESS THAN ('6') ENGINE = MyISAM,
 PARTITION p8 VALUES LESS THAN ('9') ENGINE = MyISAM,
 PARTITION p9 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */;

使用此分区,我将按第一个数字拆分 bigint 值 - 例如:

16275214652090176103 将是分区 p2 的一部分

该数据库将占用 100M 条记录:/

提前感谢

4

1 回答 1

0

您要分区的列必须是表主键的一部分,我相信它必须是主键中的最后一列。因此,如果您将主键定义为 PRIMARY KEY ( id, uniqueID),您应该能够在 uniqueID 上进行分区。

话虽如此,鉴于您的 uniqueID 字段是一个 bigint 并且您正在尝试根据 bigint 小于字符串进行分区,我不确定您要执行的操作是否会按预期工作。也许使用散列分区而不是范围分区对您来说更有用?有关更多详细信息,请参阅https://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html

于 2014-03-20T13:04:33.713 回答