MyISAM参数:
当concurrent_insert=0时,不允许并发插入功能。 
当concurrent_insert=1时,允许对没有洞洞的表使用并发插入,新数据位于数据文件结尾(缺省)。 
当concurrent_insert=2时,不管表有没有洞洞,都允许在数据文件结尾并发插入。问题:
1 上面说的“洞洞”是删除数据造成的,是表中任何一字段有索引才有这问题吧?,还是跟索引无关
2 一个表用什么命令或方法知道是否存在空洞?
3 怎么“填充”空洞?谢谢各位前辈讲解,

解决方案 »

  1.   

    1 如果是自增主键  则不存在洞洞的问题 因为永远都是插在文件末尾
    2 要写脚本自己判断
    3 如果是自增主键  无需关注
    myisam基本已经N年没有改动了  各项指标都不如innodb了
      

  2.   

    1 如果是自增主键,concurrent_insert=1时,可以并发插入?如果是非自增主键(unique,index),delete后会存在洞洞?
    3 怎么“填充”空洞(非自增主键情况)?
      

  3.   

    问题:
    1 上面说的“洞洞”是删除数据造成的,是表中任何一字段有索引才有这问题吧?,还是跟索引无关
    >>: 有没有索引,都可能由于删除数据造成“空洞”。2 一个表用什么命令或方法知道是否存在空洞?
    >>: 这个?貌似可以通过查看表数据文件对应的物理大小变化来判断,如果插入数据以后,数据文件大小保持不变,证明它插入的位置在空洞所在的空间。3 怎么“填充”空洞?
    >>:mysql ISAM引擎自己去实现。
    MyISAM存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1或2。    当 concurrent_insert设置为0时,不允许并发插入。    当concurrent_insert设置为1时,如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。如果有空洞的话虽然不能很好的并发,但是MySQL还是可以使用INSERT DELAYED来提升插入性能(仅适用于MyISAM,MEMORY和ARCHIVE引擎)。    当 concurrent_insert设置为2时,无论MyISAM表中有没有空洞,都允许在表尾并发插入记录,这时MySQL允许INSERT和SELECT语句在中间没有空数据块的MyISAM表中并行运行。