该MyISAM存储引擎支持并发插入,减少读者和作者之间的竞争给定表:如果一个MyISAM表已经在数据文件中没有孔(中删除的行),一个 INSERT语句可以执行行添加到表的末尾同时该 SELECT语句正在从表中读取行。如果有多个 INSERT语句,它们将与SELECT语句同时排队并按顺序执行 。并发的结果INSERT可能不会立即可见。
所述concurrent_insert系统变量可以被设置为修改并发插入处理。默认情况下,变量设置为AUTO(或 1),并发插入按刚才描述的方式处理。如果 concurrent_insert设置为 NEVER(或 0),则禁用并发插入。如果变量设置为ALWAYS (或 2),则即使对于已删除行的表,也允许在表末尾进行并发插入。另请参阅concurrent_insert系统变量的说明。
如果您使用的是二进制日志,并发插入将转换为CREATE ... SELECTor INSERT ... SELECT语句的正常插入。这样做是为了确保您可以通过在备份操作期间应用日志来重新创建表的精确副本。见第 5.4.4 节,“二进制日志”。此外,对于这些语句,读取锁定被放置在 selected-from 表上,从而阻止插入到该表中。结果是该表的并发插入也必须等待。
使用LOAD DATA,如果您指定 CONCURRENT一个MyISAM 满足并发插入条件的表(即中间不包含空闲块),则其他会话可以在LOAD DATA执行时从该表中检索数据。使用该 CONCURRENT选项会LOAD DATA稍微影响性能 ,即使没有其他会话同时使用该表。
如果指定HIGH_PRIORITY,--low-priority-updates如果服务器是用该选项启动的,它会覆盖该选项的效果 。它还导致不使用并发插入。
为LOCK TABLE,之间的差READ LOCAL并且READ是 READ LOCAL允许不冲突的 INSERT语句(并发插入),而锁被保持来执行。但是,如果您要在持有锁时使用服务器外部的进程来操作数据库,则不能使用此方法。




