我刚刚阅读了很多关于MyISAM和InnoDB的内容,因为我必须决定使用哪种类型。 总是提到InnoDB的'行级锁定'支持。当然,这只适用于一定数量的行。
那个(大约)会是多少?
编辑:显然我错误地提出了我的问题。我知道什么是表锁定和行锁定,但我想知道这什么时候重要。 如果我每天只插入100行,当然表锁定就足够了,但是对于一个案例来说,假设每个SECOND有100行,我认为,InnoDB将是更好的选择。我的问题:对于每秒10行还是每秒5行,行锁定是否有意义?这种选择何时会显着影响性能?
答案 0 :(得分:2)
你所要求的并不完全清楚。锁定可确保在任何给定时间只有一个用户尝试修改给定行。行级锁定意味着只有他们正在修改的一行被锁定。通常的替代方法是在修改期间锁定整个表,或者锁定表的某个子集。行级锁定只是将行的子集减少到仍然确保完整性的最小数量。
这个想法是允许一个用户修改一件事而不阻止其他用户修改其他东西。然而,值得注意的是,在某些情况下,这可能是一种误报,可以这么说。一些数据库支持行级锁定,但是使行级锁定更加昂贵,从而锁定表的大部分 - 足够昂贵以至于它可能适得其反。
编辑:您对原始帖子的编辑有帮助,但不是很多。首先,所涉及的行和硬件级别的大小产生巨大影响(将一个8字节的行插入十几个条带化15K SAS硬盘驱动器比将一个兆字节行插入单个消费类硬盘驱动器上要快一点)。
其次,它主要是关于同时用户的数量,因此插入模式有很大的不同。在凌晨3点插入的1000行可能根本不会被注意到。全天均匀插入1000行意味着更多(但可能只有一点)。当100个其他用户立即需要数据时,1000个行作为批处理权限被插入可能会被解雇(特别是如果其中一个是该公司的所有者)。
答案 1 :(得分:0)
MyISAM表支持并发插入(也就是插入没有表锁)。所以如果你符合标准,就没有问题: http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html
所以,像大多数事情一样,答案是“它取决于”。没有亮线测试。只有你才能做出决定;我们对您的应用程序/硬件/使用情况统计/等一无所知。而且,根据定义,它不能比你了解更多。