我有一个包含 48 个表的数据库,其中 45 个表是 InnoDB。
我有 3 个 MyISAM 表,大小从 200 条记录到 150 万条不等,还有 650 万个条目。
这 3 个表包含 GEO 位置信息,并且是只读的(永远不要写入 - 除非我更新一个 - 非常不频繁)。
我考虑将它们更改为 InnoDB 以使数据库 100% 相同,但读取 MYiSAM 速度更快。注意:我不需要任何特殊的 INNODB 函数 - 它只是选择/连接...就是这样。
我应该保留这些MyISAM还是将它们更改为InnoDB?
谢谢
最佳答案
几年前,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 也有很多好处。试试这个:
- 对 MyISAM 表执行长时间运行的 UPDATE。
- 中途中断它。更改了多少行?有一些,但不是全部。
- 对 InnoDB 表重复相同的测试。更改了多少行? 零!
InnoDB 支持原子更改,因此每个 SQL 语句要么完全成功,要么回滚。您不会获得部分完成的更改。
InnoDB 还支持崩溃恢复,因此如果 mysqld 崩溃,您不会丢失数据。 MyISAM 因崩溃期间损坏表而闻名。
InnoDB还将数据缓存在RAM(InnoDB缓冲池)中,而MyISAM则依赖文件系统缓存来加速数据I/O。如果您有足够的 RAM,这会使 InnoDB 中的某些查询速度更快。
仅当您不关心数据时才使用 MyISAM。
关于MySQL - InnoDB 或 MyISAM - 只读表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236542/