Aka*_*mar 1 mysql myisam innodb
每秒超过100次插入查询使用哪个引擎
我阅读了 MYISAM 和 Innodb 的差异和优缺点。
但我仍然对表中的 100 多个插入查询(主要用于跟踪目的)感到困惑,我应该使用哪个数据库。
我参考了MyISAM和InnoDB有什么区别?
根据我的理解,对于每次插入,MYISAM 都会锁定表,因此应该使用 innodb 进行行锁定。
但另一方面,MYISAM 的性能要好 100 倍。
那么最佳且正确的选择应该是什么?为什么?
在任何引擎(尤其是 InnoDB)中,无需任何调整即可执行一行操作的简单代码INSERTs每秒的最大处理速度约为 100 行。
但是,每秒可以获取 1000 行甚至更多。
InnoDB 的快速修复方法是设置innodb_flush_log_at_trx_commit = 2; 这将解决使用商用旋转磁盘阻止 InnoDB 每秒 100 次插入的主要问题。设置innodb_buffer_pool_size为可用 RAM 的 70% 左右也很重要。
如果用户同时向同一个表中插入多行,则100 行或更多行的LOAD DATA批量 Insert( ) 插入速度将提高十倍。这适用于任何引擎。INSERT ... VALUES (...), (...), ...
MyISAM 的速度不是100 倍;它甚至不及 InnoDB 的 10 倍。如今(5.6 或更高版本),您很难找到一个在 MyISAM 中速度更快的经过良好调整的应用程序。您现在或将来会受到 I/O 限制。
至于腐败——除了碰撞之外,没有任何发动机会遭受腐败。电源故障可能会损坏 MyISAM 索引,但通常是可以恢复的。此外,批量插入可以完成一半。InnoDB 将是干净的——整个批次完成或全部完成;没有腐败。
ARCHIVE节省磁盘空间,但会消耗 CPU 资源。
MEMORY通常速度更快,因为它没有 I/O。但是该引擎的数据太多了,对吗?
MariaDB 和 TokuDB 的运行速度可能比我在这里描述的任何东西都快;但你没有表明需要它。
每秒插入 100 行 = 8M/天 = 30 亿/年。您最终会清除数据吗?你会查询数据吗?净化:我们来谈谈PARTITION。查询:我们来谈谈汇总表。
索引:尽量减少索引的数量。如果您有一个“随机”索引,例如 UUID,并且有 10 亿行,那么无论使用哪个引擎以及进行任何调整,您都将陷入 100 行/秒的困境。我需要进一步解释吗?
如果这是一个排队系统,我会说“不要排队,直接去做”。
底线:使用 InnoDB。调整它。使用批量插入。避免随机索引。ETC。