MySQL - InnoDB或MyISAM - 只读表

时间:2012-02-11 00:04:07

标签: mysql

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

我有3张MyISAM表,其大小范围从200条记录到1.5Mil,还有6.5Mil条目。

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

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

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

THX

4 个答案:

答案 0 :(得分:3)

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表重复相同的测试。有多少行已被更改? 归零!
  4. InnoDB支持 atomic 更改,因此每个SQL语句都可以完全成功,或者回滚。您不会得到部分完成的更改。

    InnoDB还支持崩溃恢复,因此如果mysqld崩溃,您将不会丢失数据。 MyISAM以崩溃期间破坏桌子而闻名。

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

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

答案 1 :(得分:0)

无需更改INNODB。正如你所说,有很多记录因此MYISAM

更快 在大多数情况下,

MyISAM将比InnoDB更快地进行磨机工作。在正常情况下,选择,更新和插入都非常快。

答案 2 :(得分:0)

我不打算改变它。我只是在研究同样的事情并且遇到了这个有用的帖子:http://www.kavoir.com/2009/09/mysql-engines-innodb-vs-myisam-a-comparison-of-pros-and-cons.html

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

答案 3 :(得分:0)

不需要进行任何更改,我正在开发类似的项目,数据库将用于只读,而Myisam是最佳选择。

此外,如果您想要更快的阅读,您甚至可以使用狮身人面像。

希望这会有所帮助。