MySQL - InnoDB 或 MyISAM - 只读表

标签 mysql

我有一个包含 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 也有很多好处。试试这个:

  1. 对 MyISAM 表执行长时间运行的 UPDATE。
  2. 中途中断它。更改了多少行?有一些,但不是全部。
  3. 对 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/

相关文章:

PHP 在关联数组中使用长文本有一些影响吗?

mysql - 使用 mysql 在 Amazon EC2 上设置网站

mysql - 调整 SSD MySql 性能

java - 如何在 Spring MVC 中解决 HTTP 404 状态?

mysql - MySQL 中的一对多关系

mysql 选择动态行作为列名

mysql - 需要查找购买的每种产品的销售地点数量吗?

mysql - 如何使用 float 和created_at(时间戳)创建mysql数据库表

php - 在 PHP 中将数据库日期格式转换为 yyyy-mm-dd 并返回到 dd-mm-yyyy

python - 将值存储到 mySQL 表时出错