我的MysQL数据库包含多个MyISAM表,每个表包含数百万行。数据库上有大量的插入负载,因此我无法在该实时数据库上发出SELECT。相反,我创建了数据库的副本以进行查询并对其进行分析。
对于分析,我需要发出多个并行查询。查询是独立的(即,查询的结果不被组合在一起),但是它们大多数时间在相同的表上操作。据我所知,每个查询都锁定了整个MyISAM表,这意味着并行独立查询会很慢。理想情况下,我更喜欢支持“NO LOCKING”的引擎。我假设MySQL没有这样的引擎,所以我应该使用InnoDB吗?我可能在这里遗漏了很多东西。请建议在这里采取正确的途径。
由于
答案 0 :(得分:1)
MyISAM
读锁是兼容的,因此SELECT
查询不会相互锁定。
如果您对副本数据库的分析查询没有写入,只能读取,那么可以使用MyISAM
。
答案 1 :(得分:1)
您可以坚持使用MyISAM并使用INSERT DELAYED
:
当客户端使用INSERT DELAYED时,它会立即从服务器获得一个好处,并且当该表未被任何其他线程使用时,该行将排队插入。
使用INSERT DELAYED的另一个主要好处是来自许多客户端的插入被捆绑在一起并写在一个块中。这比执行许多单独的插入要快得多。