【问题标题】:Is MySQL InnoDB is appropriate for this scenario?MySQL InnoDB 是否适合这种情况?
【发布时间】:2010-04-21 15:13:12
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: mysql locking parallel-processing innodb myisam


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可以坚持使用 MyISAM 并使用 INSERT DELAYED:

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        相关资源
        最近更新 更多