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