首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyISAM孔会自动填入吗?

MyISAM孔会自动填入吗?
EN

Stack Overflow用户
提问于 2010-05-28 16:26:39
回答 2查看 604关注 0票数 2

当您在MyISAM表上运行delete时,它会在表中留下一个漏洞,直到对表进行优化。

这会影响并发插入。在默认设置中,concurrent_inserts只对没有漏洞的表工作。但是,在MyISAM的文档中,在concurrent_insert部分中,它说:

为所有MyISAM表,甚至那些有漏洞的表启用并发插入。对于有孔的表,如果另一个线程正在使用新行,则在表的末尾插入新行。否则,MySQL将获得一个普通的写锁,并将该行插入孔中。

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_concurrent_insert

这是否意味着每当将新行插入到表中时,MyISAM都会自动填充漏洞?以前,我以为在优化表格之前,这些洞是不会被修复的。

EN

回答 2

Stack Overflow用户

发布于 2010-05-28 16:31:29

是的,MyISAM表重用已删除/空闲的空间(对于所有情况都是这样,我不知道)。

通过删除一些记录并插入一些新的记录就可以很容易地观察到这一点--该表的MyISAM数据文件不会增长。

票数 1
EN

Stack Overflow用户

发布于 2010-05-28 16:33:14

插入表的中间需要一个锁。因此,在默认设置中,MySQL将倾向于填充漏洞,尽管它将防止并发插入。

所以,是的,MySQL更喜欢填补这些漏洞。

将concurrent_inserts设置为2会告诉MySQL,如果表上有锁,则在表的末尾插入,这不需要锁,尽管仍有漏洞需要填补。因此,这允许并发插入,即使中间有洞,代价是要花更长的时间来填补这些漏洞。

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

https://stackoverflow.com/questions/2930747

复制
相关文章

相似问题

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