日期:2014-05-16  浏览次数:20762 次

关于表分区的问题

例如有一个表


CREATE TABLE `content` (

  `conid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id',

  `uid` int(20) unsigned NOT NULL COMMENT '用户id',

  `contype` tinyint(4) NOT NULL COMMENT '文章类型',

  `content` text NOT NULL COMMENT '文章内容',

  `img` varchar(18) NOT NULL COMMENT '上传图片',

  `comnum` smallint(5) unsigned NOT NULL COMMENT '文章评论数',

  `sub` smallint(6) NOT NULL COMMENT '顶踩差',

  `isdelete` tinyint(3) unsigned NOT NULL COMMENT '文章是否已删除',

  `datatime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间',

  PRIMARY KEY (`conid`),

  KEY `uid` (`uid`),

  KEY `datatime` (`datatime`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=107 ;


因为 contype 只有三个取值 , 想根据 contype 的三个不同取值建立表分区

不知道这样的表分区 和 根据 contype 的不同取值建立三个表 相比,哪个好?

另外 表分区对性能影响大吗? 表分区不支持 外键 和 全文表索引吗?

谢谢

------解决方案--------------------
探讨

引用:

根据哪个字段来做分区,则要看你的主要查询是基于哪个字段。


查询语句类似:

SELECT * FROM content WHERE `contype` = '1'

因为有时只需要查询contype = 1的情况,有时候需要查询 contype = 2 的情况

而有的时候 又不用管contype

所以我考虑建立表分区

那要……

------解决方案--------------------
CREATE TABLE `content` (

`conid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文章id',

`uid` INT(20) UNSIGNED NOT NULL COMMENT '用户id',

`contype` TINYINT(4) NOT NULL COMMENT '文章类型',

`content` TEXT NOT NULL COMMENT '文章内容',

PRIMARY KEY (`conid`,`contype`),

KEY `uid` (`uid`)
) PARTITION BY RANGE (`contype`) (PARTITION p0 VALUES LESS THAN (1),
 PARTITION p1 VALUES LESS THAN (2),PARTITION p2 VALUES LESS THAN (3))