对mysql表的一次插入锁定了整个数据库



我有MyIsam表,记录很少(大约20条(:

CREATE TABLE `_cm_dtstd_37` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NUMBER` int(10) NOT NULL COMMENT 'str',
`DESCRIPTION` char(32) NOT NULL COMMENT 'str',
PRIMARY KEY (`id`),
UNIQUE KEY `PHONE` (`NUMBER`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='==CORless Numbers=='

单插入:

INSERT IGNORE INTO _cm_dtstd_37 VALUES(NULL, 55555, '55555')

执行需要很长时间(大约5到7分钟(,并使MySql服务器将每个下一个查询置于"等待"状态。在第一次INSERT完成之前,不会执行其他查询(甚至是那些读/写其他表的查询(。

我不知道如何调试这个,也不知道在哪里搜索任何线索。

所有插入到另一个表的操作都很好,当不插入到原始表时,整个数据库都很好。

这是从MyISAM迁移到InnoDB的一个重要原因。

MyISAM允许多个同时读取(SELECT(,但任何类型的写入都会锁定整个表,即使是在写入时也是如此。

InnoDB使用";行锁定";,因此大多数对表的同时访问对彼此没有明显的影响。

最新更新