mysql - MyISAM 与 InnoDB 的 BI/批处理查询性能(即_NOT_OLTP)

标签 mysql performance innodb myisam

当然,对于事务型数据库,InnoDB 是一个灌篮高手。 MyISAM 不支持事务或行级锁定。

但是,如果我想执行涉及数亿行的大批量查询怎么办?

MyISAM 在哪些方面比 InnoDB 具有相对优势?

例如,我知道的一个(次要)...“从 my_table 中选择计数 (*);” MyISAM 立即知道答案,而 InnoDB 可能需要一分钟或更长时间才能做出决定。

---戴夫

最佳答案

MyISAM 可以更好地扩展非常大的数据集。 InnoDB 在很多情况下都优于 MyISAM,直到它无法将索引保留在内存中,然后性能急剧下降。

MyISAM 还支持 MERGE 表,这是一种“穷人的”分片。您可以立即添加/删除非常大的数据集。例如,如果每个业务季度有 1 个表,则可以创建最近 4 个季度、特定年份或任何您想要的范围的合并表。无需导出、删除和导入来移动数据,您只需重新声明底层 MERGE 表内容即可。无需更改代码,因为表的名称不会更改。

MyISAM 也更适合日志记录,当你只添加到一个表中时。与 MERGE 表一样,您可以轻松换出(旋转“日志”)表和/或复制它。

您可以将与 MyISAM 表关联的 DB 文件复制到另一台计算机,并将它们放在 MySQL 数据目录中,MySQL 会自动将它们添加到可用表中。你不能用 InnoDB 做到这一点,你需要导出/导入。

这些都是具体案例,但我已经多次利用了每一个案例。

当然,通过复制,您可以同时使用两者。一个表可以是 master 上的 InnoDB 和 slave 上的 MyISAM。结构必须相同,而不是表类型。然后,您可以充分利用两者。 BLACKHOLE 表类型以这种方式工作。

关于mysql - MyISAM 与 InnoDB 的 BI/批处理查询性能(即_NOT_OLTP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925097/

相关文章:

java - 当我使用 Reference 类时会发生什么以及多少开销?

python - 如何通过矩阵numpy向量化循环

mysql - Windows 7 MySQL 错误 1067 服务无法启动

php - MySQL 数据库结果是否会因表中的列数而变慢?

mysql - 批量 MySQL 插入比 PHP 慢 2 倍

php - 错误的时间戳/时区转换

mysql - 在 MySQL/Innodb 中更新后如何解锁元组?

mysql - 在 bash 中捕获 Mysql 错误

php - 在跟踪行的状态时,哪个更快、更受欢迎?

MySQL/InnoDB 连接数限制