一次插入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 使用“行锁定”,因此大多数同时访问一个表不会对彼此产生明显影响。