读书人

关于表分区的有关问题

发布时间: 2012-08-17 02:08:34 作者: rapoo

关于表分区的问题

例如有一个表


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))

读书人网 >Mysql

热点推荐