0

我有一个包含大量写入操作的日志表:这就是选择 MyISAM 的原因。

现在我需要执行一个复杂的 SELECT 查询,这会花费大量时间并阻塞表:那时没有人可以写入它。

  • 该表具有较高的“写入”负载
  • 我不在乎我是否没有最新的记录
  • 数据永远不会被删除

在不阻塞表的情况下读取数据的选项有哪些?

  • LIMIT 在查询完成后应用,因此不是一个选项
  • 修改所有 INSERT 语句以使它们 DELAYED 不是一种选择
  • InnoDB 也不是一个选项
  • HANDLER 查询不是一个选项:我需要复杂的 WHERE 条件
4

1 回答 1

2

一些建议,也许其中一个适合你

  1. 选项:奴隶

    配置用于 SELECT 查询的从站。这不会阻止插入。但是,这需要第二台服务器、一些配置和存储空间,所以这不是一个好的解决方案,只是为了获取您的数据。

  2. 选项:使用低优先级更新:http ://dev.mysql.com/doc/refman/5.0/en/table-locking.html

    这可以在服务器级别或连接级别完成,因此您不必修改每个插入语句。

  3. 工作进程

    • 像往常一样制作插入物。
    • 创建一个工作进程,将您的日志条目(对于表 A 中的每一行,在表 B 中插入,在表 A 中删除行)“移动”到另一个表。
    • 现在您可以查询表 B
于 2012-12-05T15:14:39.783 回答