首页 文章

在其他表中分离更新列是否有助于优化(MySQL MyISAM表)?

提问于
浏览
4

MySQL MyISAM“ Table1 ”具有 70% select13% update0.67% insert 语句近似值 .

有一个“ count_column(int) ”用于增加主键的计数 . (更新语句)

更新“ count_column ”使表格选择查询 "Waiting for table level lock"

那么在其他表中分离“ count_column ”会减少 "Waiting for table level lock" 吗?

我还需要在select语句中使用join来分隔列 .

谢谢,Yogs

2 回答

  • 1

    AFAIK你的锁定问题是带有INSERT的COUNT,而不是UPDATE本身 - 但你必须拥有大量的SELECT . 你的问题缺乏一些细节......

    COUNT真的在MyISAM表上进行了优化,如果你遇到问题,你可能应该考虑一个计数估计或保存这个值的内存表: - \但是为存储引擎非常快速地获取MyISAM的精确行数,所以你甚至可以用你的解决方案减慢MySQL的速度 . “慢”COUNT对InnoDB等引擎有效,因为它们具有交易性质 .

    另一件需要考虑的事情是,在表中的列中存储计数是每行的附加列,非常糟糕 .

    如果你使用触发器来完成它你应该知道http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-12 :)

  • 1

    在另一个表中移动频繁更新的单元格将大大减少表上的锁定数量并加快对其的选择 . 将表转换为InnoDB也可以提供帮助(如果您不使用全文索引,它们在MySQL 5.5 InnoDB中仍然不受支持),因为它使用行级锁而不是表级 . 如果您有很多疑问,请查看this article about implementing efficient counters

相关问题