MYSQL 分区求帮助

MySql 码拜 9年前 (2016-02-13) 1171次浏览
CREATE TABLE IF NOT EXISTS `wz_article` (
  `aid` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(150) NOT NULL DEFAULT "",
  `smalltitle` varchar(100) NOT NULL DEFAULT "",
  `fid` mediumint(7) unsigned NOT NULL DEFAULT "0",
  `mid` mediumint(5) NOT NULL DEFAULT "0",
  `fname` varchar(50) NOT NULL DEFAULT "",
  `hits` mediumint(7) NOT NULL DEFAULT "0",
  `pages` smallint(4) NOT NULL DEFAULT "0",
  `comments` mediumint(7) NOT NULL DEFAULT "0",
  `posttime` int(10) NOT NULL DEFAULT "0",
  `list` int(10) NOT NULL DEFAULT "0",
  `uid` mediumint(7) NOT NULL DEFAULT "0",
  `username` varchar(180) NOT NULL DEFAULT "",
  `author` varchar(30) NOT NULL DEFAULT "",
  `copyfrom` varchar(100) NOT NULL DEFAULT "",
  `copyfromurl` varchar(150) NOT NULL DEFAULT "",
  `titlecolor` varchar(15) NOT NULL DEFAULT "",
  `fonttype` tinyint(1) NOT NULL DEFAULT "0",
  `picurl` varchar(150) NOT NULL DEFAULT "0",
  `ispic` tinyint(1) NOT NULL DEFAULT "0",
  `yz` tinyint(1) NOT NULL DEFAULT "0",
  `yzer` varchar(30) NOT NULL DEFAULT "",
  `yztime` int(10) NOT NULL DEFAULT "0",
  `levels` tinyint(2) NOT NULL DEFAULT "0",
  `levelstime` int(10) NOT NULL DEFAULT "0",
  `keywords` varchar(100) NOT NULL DEFAULT "",
  `jumpurl` varchar(150) NOT NULL DEFAULT "",
  `iframeurl` varchar(150) NOT NULL DEFAULT "",
  `style` varchar(15) NOT NULL DEFAULT "",
  `template` varchar(255) NOT NULL DEFAULT "",
  `target` tinyint(1) NOT NULL DEFAULT "0",
  `ip` varchar(15) NOT NULL DEFAULT "",
  `lastfid` mediumint(7) NOT NULL DEFAULT "0",
  `money` mediumint(7) NOT NULL DEFAULT "0",
  `buyuser` text NOT NULL,
  `passwd` varchar(32) NOT NULL DEFAULT "",
  `allowdown` varchar(150) NOT NULL DEFAULT "",
  `allowview` varchar(150) NOT NULL DEFAULT "",
  `editer` varchar(30) NOT NULL DEFAULT "",
  `edittime` int(10) NOT NULL DEFAULT "0",
  `begintime` int(10) NOT NULL DEFAULT "0",
  `endtime` int(10) NOT NULL DEFAULT "0",
  `description` text NOT NULL,
  `lastview` int(10) NOT NULL DEFAULT "0",
  `digg_num` mediumint(7) NOT NULL DEFAULT "0",
  `digg_time` int(10) NOT NULL DEFAULT "0",
  `forbidcomment` tinyint(1) NOT NULL DEFAULT "0",
  `ifvote` tinyint(1) NOT NULL DEFAULT "0",
  `heart` varchar(255) NOT NULL DEFAULT "",
  `htmlname` varchar(100) NOT NULL DEFAULT "",
  PRIMARY KEY (`aid`),
  KEY `fid` (`fid`),
  KEY `hits` (`hits`,`yz`,`fid`,`ispic`),
  KEY `lastview` (`yz`,`lastview`,`fid`,`ispic`),
  KEY `list` (`list`,`yz`,`fid`,`ispic`),
  KEY `ispic` (`ispic`),
  KEY `uid` (`uid`),
  KEY `levels` (`levels`),
  KEY `digg_num` (`digg_num`),
  KEY `mid` (`mid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=805370 ;

如上面的代码 是一个文章的SQL 现在80万数据了 慢的蜗牛一样了 想进行分区
高手们有什么好的办法吗  根据aid 每10万进行一个分区怎样?
怎么分?现有的数据怎么规整下?
特来求帮助各位高手 万分感谢了 分不多了 全部送上

解决方案

18

1、80万数据量不算大,可以优化下相关sql或调整下索引
2、假如数据量还一直不断增加,要分区的话,还是根据业务特点确定按哪个字段分区,例如经常有按aid的查询,则可以按aid分区
3、怎么分区,还要看分区字段的类型,如是int型,可以按range或hash;假如是time型,则按月或年进行range较好
个人观点,如有不妥,请大家指正

19

本人看你索引页建了不少,慢可以优化。
你可以把慢的语句贴出来,分析一下执行计划看看。
分区表在大部分情况下,并不能很有效的提高查询的性能,反而,有可能用了分区表之后,速度会更慢

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MYSQL 分区求帮助
喜欢 (0)
[1034331897@qq.com]
分享 (0)