我刚刚阅读了很多关于 MyISAM 和 InnoDB 的资料,因为我必须决定使用哪种类型。 总是提到“行级锁定”——对 InnoDB 的支持。当然,这只对一定数量的行有意义。
那(大约)是多少?
编辑:显然我的问题措辞有误。我知道表锁定和行锁定是什么意思,但我想知道什么时候这很重要。 如果我每天只插入 100 行,当然表锁定就足够了,但对于我认为每秒 100 行的情况,InnoDB 将是更好的选择。
我的问题:对于每秒 10 行或每秒 5 行,行锁定是否有意义?此选择何时会显着影响性能?
最佳答案
你问的不是很清楚。锁定确保在任何给定时间只有一个用户尝试修改给定行。行级锁定意味着只有他们正在修改的一行被锁定。通常的替代方法是在修改期间锁定整个表,或者锁定表的某些子集。行级锁定只是将行的子集减少到仍然确保完整性的最小数量。
这个想法是允许一个用户修改一个东西而不阻止其他用户修改其他东西。然而,值得注意的是,在某些情况下,这可以说是误报。一些数据库支持行级锁定,但行级锁定比锁定表的大部分更昂贵 - 足够昂贵以至于它可能适得其反。
编辑:您对原始帖子的编辑有所帮助,但作用不大。首先,行的大小和所涉及的硬件级别会产生巨大影响(将 8 字节的行插入十几个 strip 化的 15K SAS 硬盘驱动器比将 1 兆字节的行插入单个消费级硬盘驱动器快一点点).
其次,这在很大程度上与并发用户的数量有关,因此插入模式会产生很大的不同。凌晨 3 点插入的 1000 行可能根本不会被注意到。全天平均插入 1000 行意味着多一点(但可能只有一点)。当 100 个其他用户立即需要数据时,批量插入 1000 行可能会导致有人被解雇(特别是如果这 100 个用户中有一个是公司的所有者)。
关于mysql - InnoDB 行级锁定性能 - 多少行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2028465/