MyISAM转innoDB 出现的一个小问题

discuz源码里边使用的都是MyISAM,流量大的时候表经常crash。然后众人都不淡定了,决定把引擎改为innoDB。

只需一行代码 alter table 表明 engine = innoDB

以为比较简单,直接上线,结果果然出了问题,需要回滚。。。


下来研究发现时innoDB的auto increment字段使用上出了问题。


原来表是这样子的

CREATE TABLE `xm_forum_post` (
  `pid` bigint(20) NOT NULL,
  `fid` bigint(20) NOT NULL DEFAULT '0',
  `tid` bigint(20) NOT NULL DEFAULT '0',
  `first` tinyint(1) NOT NULL DEFAULT '0',
  `author` varchar(64) NOT NULL DEFAULT '',
  `authorid` bigint(20) NOT NULL DEFAULT '0',
  `subject` varchar(80) NOT NULL DEFAULT '',
  `dateline` int(10) unsigned NOT NULL DEFAULT '0',
  `message` mediumtext NOT NULL,
  `useip` varchar(15) NOT NULL DEFAULT '',
  `port` smallint(6) unsigned NOT NULL DEFAULT '0',
  `invisible` tinyint(1) NOT NULL DEFAULT '0',
  `anonymous` tinyint(1) NOT NULL DEFAULT '0',
  `usesig` tinyint(1) NOT NULL DEFAULT '0',
  `htmlon` tinyint(1) NOT NULL DEFAULT '0',
  `bbcodeoff` tinyint(1) NOT NULL DEFAULT '0',
  `smileyoff` tinyint(1) NOT NULL DEFAULT '0',
  `parseurloff` tinyint(1) NOT NULL DEFAULT '0',
  `attachment` tinyint(1) NOT NULL DEFAULT '0',
  `rate` smallint(6) NOT NULL DEFAULT '0',
  `ratetimes` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `status` int(10) NOT NULL DEFAULT '0',
  `tags` varchar(255) NOT NULL DEFAULT '0',
  `comment` tinyint(1) NOT NULL DEFAULT '0',
  `replycredit` int(10) NOT NULL DEFAULT '0',
  `position` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `appfrom` varchar(255) DEFAULT NULL COMMENT 'app来自机型',
  PRIMARY KEY (`tid`,`position`),
  UNIQUE KEY `pid` (`pid`),
  KEY `fid` (`fid`),
  KEY `authorid` (`authorid`,`invisible`),
  KEY `dateline` (`dateline`),
  KEY `invisible` (`invisible`),
  KEY `displayorder` (`tid`,`invisible`,`dateline`),
  KEY `first` (`tid`,`first`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

这里position自增的时候,是在tid相同条件下自增。比如首先insert tid =1,position的默认值=1;insert tid=1 ,这时position的默认值=2;然后insert tid=2, position的默认值又=1。


而innoDB的auto increment字段必须单独建索引,需要

ALTER TABLE `xm_forum_post` ADD INDEX position ( `position` );


这时候情况就变了,position独立成索引后自增不再看tid的眼色,自顾自自增了,一口大黑锅从天而降。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值