例如有一个表
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
所以我考虑建立表分区
按 contype 分区后,对 where contype = @x 这类查询会比不分区效率提高
而有的时候 又不用管contype
对这类查询没有实际帮助。