【问题标题】:is separating update column in other table will help in optimization(MySQL MyISAM table)?在其他表中分离更新列是否有助于优化(MySQL MyISAM 表)?
【发布时间】:2012-05-31 21:36:19
【问题描述】:

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

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

更新“count_column”在“等待表级锁定”中进行表选择查询

那么在其他表中分离“count_column”会不会减少“等待表级锁”

我还需要在带有连接的 select 语句中分隔列。

谢谢你,Yogs

【问题讨论】:

  • 解释一下,count_column = 反击?怎么样?。
  • 剩下的 16.33% 的语句呢?可以安全地忽略它们吗?
  • (16.33%) 可以安全地忽略它们吗?是的

标签: mysql phpmyadmin query-optimization myisam


【解决方案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 :)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多