首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL MyISAM -执行不加锁的插入

MySQL MyISAM -执行不加锁的插入
EN

Stack Overflow用户
提问于 2012-07-23 22:31:43
回答 4查看 8.9K关注 0票数 1

如何在不锁定表的情况下始终对MySQL MyISAM数据库执行插入操作?

当我加载100,000条记录时,我的其他进程似乎被锁定了。

基本上,我可以强制使用concurrent_inserts=2吗,即使表中有洞,这样在插入过程中就不会有表锁定?

可以为会话动态设置concurrent_inserts吗?请参阅http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html

对于非锁定插入,还有哪些其他方法?

"insert delayed“会在插入期间阻止表锁定吗?请参阅http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html

EN

回答 4

Stack Overflow用户

发布于 2012-07-23 22:57:03

如果您以小批的方式执行插入,使用INSERT DELAYED将使从表中选择的客户端基本上获得第一优先级,这样它们就不会阻塞。如果一次插入数千行,可能会将表锁定一段时间。另一件有助于加快插入速度的事情是临时告诉DB跳过唯一检查。这将阻止对任何唯一键的持续分析,但不会阻止表的锁定。您必须确保您插入的内容是唯一的。

在执行多次插入时,InnoDB通常是更好的选择,因为它将锁定行,而不是表。您的插入将花费更长的时间,但是您的客户端将看到更好的并发性能。

票数 4
EN

Stack Overflow用户

发布于 2013-05-02 21:10:24

我也遇到过同样的问题。我尝试将2500,000条记录插入到一个MyISAM表中。它是一个独立的表,所以锁不会让我担心。但是插入过程只是冻结了整个数据库服务器。

所以我做了什么:

  • 删除所有索引E(在过程结束时添加这些索引)
  • do 2500 row per INSERT
  • INSERT DELAYED INTO

就这样。

票数 1
EN

Stack Overflow用户

发布于 2012-07-23 22:57:11

IIRC MyISAM在任何插入操作发生时锁定表。只需重新阅读并确认:

为了实现非常高的锁定速度,MySQL对除InnoDB、BDB和

之外的所有存储引擎都使用表锁定(而不是页、行或列锁定

摘自:http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

如果你知道任何非锁定的MyISAM插件,请让我知道--因为这是我每天都要面对的问题(我不喜欢InnoDB的空间消耗和速度)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11614616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档