我有一组简单的编写器和一组使用MySQL ISAM表的读者。编写器只插入行,而读者只检查新行。
好的,所以我知道在这种情况下我不需要锁,因为我没有修改现有的行。但是我的作家正在访问另一个 需要锁的表。除了MySQL文档中规定的以下限制外,我的信息似乎无关紧要:
需要锁定的会话必须 获得它需要的所有锁 单个LOCK TABLES语句。而 由此获得的锁被保持着 session只能访问锁定的 表。例如,在下面 陈述序列,错误 尝试访问t2时发生 因为它没有锁定在LOCK中 TABLES声明:
所以要访问我要插入行的表,我需要锁定它,这导致我的性能问题。有关如何解决此问题的任何建议?
答案 0 :(得分:0)
通常,您可以在需要锁定的查询周围立即锁定和解锁。文档只是声明,对于锁定时运行的任何查询集,必须锁定所有涉及的表。您可以在完成后立即解锁并触摸任何其他表格。
还要考虑InnoDB支持行级锁定,这通常比表锁定性能更好,因为在你写的时候,其他行上的其他查询也不会被锁定以供读取。