1

我的 MySQL 数据库包含多个 MyISAM 表,每个表包含数百万行。数据库上的插入负载很重,因此我无法在该实时数据库上发出 SELECT。相反,我创建了数据库的副本以进行查询并对其进行分析。

为了分析,我需要发出多个并行查询。查询是独立的(即,查询的结果没有组合在一起),但它们大部分时间都在同一张表上操作。据我所知,每个查询都会锁定整个 MyISAM 表,这意味着并行独立查询会很慢。理想情况下,我更喜欢支持“NO LOCKING”的引擎。我假设 MySQL 没有这样的引擎,那么我应该使用 InnoDB 吗?我可能在这里遗漏了很多东西。请建议在这里采取的正确道路。

谢谢

4

2 回答 2

1

您可以坚持使用 MyISAM 并使用INSERT DELAYED

当客户端使用 INSERT DELAYED 时,它会立即从服务器获得一个 OK,并且当该表未被任何其他线程使用时,该行将排队等待插入。

使用 INSERT DELAYED 的另一个主要好处是来自许多客户端的插入被捆绑在一起并写入一个块中。这比执行许多单独的插入要快得多。

于 2010-04-21T15:18:58.073 回答
1

MyISAM读锁是兼容的,所以SELECT查询不会互相锁定。

如果你对副本数据库的分析查询不写,只读,那么使用MyISAM.

于 2010-04-21T15:17:40.243 回答