【问题标题】:MySQL - InnoDB or MyISAM - Read Only TablesMySQL - InnoDB 或 MyISAM - 只读表
【发布时间】:2013-10-12 08:34:45
【问题描述】:

我有一个包含 48 个表的数据库,其中 45 个表是 InnoDB。

我有 3 个 MyISAM 表,大小从 200 条记录到 150 万条不等,还有一个 650 万条条目。

这 3 个表包含 GEO 位置信息并且是只读的(从不写 - 除非我要更新一个 - 非常罕见)。

我考虑将它们更改为 InnoDB 以使数据库 100% 相同,但随后读取 MYiSAM 会更快。注意:我不需要任何特殊的 INNODB 函数 - 它只是选择/加入......就是这样。

我应该保留这些 MyISAM 还是将它们更改为 InnoDB?

谢谢

【问题讨论】:

    标签: mysql


    【解决方案1】:

    MyISAM 在几年前曾经速度更快,但如果您使用任何合理的当前版本的 InnoDB,那么 InnoDB 对于大多数工作负载来说都更快。这是 2007 年的性能比较,显示 InnoDB 在所有查询类型中都已经匹配或优于 MyISAM。

    http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/

    自 2007 年的那次测试以来,InnoDB 一直在变得更好,而 MySQL 开发人员几乎没有花时间改进 MyISAM。它死了,吉姆。

    MyISAM 可能更快的唯一情况是在进行全表扫描时,您应该尝试定义索引以避免表扫描。

    自 5.5(大约 2010 年)以来,InnoDB 一直是 MySQL 中的默认存储引擎。随着 MySQL 的每个主要版本,MyISAM 正在消失变得更加明显。

    即使您不使用事务或外键等显式功能,InnoDB 也有很多好处。试试这个:

    1. 对 MyISAM 表执行长时间运行的 UPDATE。
    2. 中途中断。更改了多少行?一些,但不是全部。
    3. 对 InnoDB 表重复相同的测试。更改了多少行? 零!

    InnoDB 支持 原子 更改,因此每个 SQL 语句要么完全成功,要么回滚。您不会得到部分完成的更改。

    InnoDB 还支持崩溃恢复,因此如果 mysqld 崩溃了,您也不会丢失数据。 MyISAM 以在崩溃期间损坏表而闻名。

    InnoDB 还在 RAM(InnoDB 缓冲池)中缓存数据,而 MyISAM 依赖文件系统缓存来加速数据 I/O。如果您有足够的 RAM,这会使 InnoDB 中的一些查询更快。

    仅当您不关心您的数据时才使用 MyISAM。

    【讨论】:

      【解决方案2】:

      无需更改INNODB。正如你所说,他们有很多记录,所以他们比MYISAM 更快

      MyISAM 在大多数情况下会比 InnoDB 更快地运行磨坊式的工作。在正常情况下,选择、更新和插入都非常迅速。

      【讨论】:

      • 换句话说,InnoDB 的主要优势往往与写入有关:行级锁定允许在高并发期间进行更多的同时写入,并且符合 ACID / 日志可以实现更安全的原子写入。也就是说,InnoDB 仍然快速,它只是做了很多对只读表变得毫无意义的事情。在某些情况下,MyISAM 更快,但值得测试您的特定工作负载,因为有些事情做得更快。 InnoDB 现在是默认值,除非有令人信服的理由,否则使用默认值是有价值的,因为它可以简化配置等。
      【解决方案3】:

      我不会费心去改变它。我只是在研究同样的事情,偶然发现了这个有用的帖子:http://www.kavoir.com/2009/09/mysql-engines-innodb-vs-myisam-a-comparison-of-pros-and-cons.html

      您想要 Innodb 的主要原因是为了数据完整性并避免在插入时锁定整个表。但是如果你没有做很多插入并且这些不是高流量表,那么为什么要进行更改?

      【讨论】:

        【解决方案4】:

        无需更改,我正在做类似的项目,其中数据库将用于只读,Myisam 是最好的选择。

        此外,如果您想要更快的读取速度,您甚至可以使用 sphinx。

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2011-05-14
          • 2012-01-13
          • 2011-09-17
          • 2011-04-24
          • 2016-01-05
          • 1970-01-01
          • 2012-03-01
          • 2011-07-25
          • 1970-01-01
          相关资源
          最近更新 更多