最佳 Mysql DB 引擎当未进行插入更新删除查询时

最佳 Mysql DB 引擎当未进行插入更新删除查询时

什么应该是最好的 Mysql 数据库引擎?当更新、插入、删除等查询很少发生时(99% 的时间都不会发生)

数据库中有很多条目主要是数字数据类型,选择查询基于条件语句,比较数值并返回结果

我应该在这里使用 MyISAM 吗?

还有一件事是数据库将同时被多个用户使用

谢谢

答案1

我选择 MyISAM 而不是 InnoDB 主要有以下三点原因

原因 1:MyISAM 存储引擎提供了更简单的机制来提高读取性能

MyISAM 表仅由三个文件组成

  • .frm(格式文件)
  • .MYD(数据文件)
  • .MYI(索引文件)

只需对表的行格式进行简单的更改,即可调整 MyISAM 表以实现更快的读取速度。

例如,本书第 71-73 页MySQL 数据库设计和调优建议对 MyISAM 表执行此操作:

ALTER TABLE tblname ROW_FORMAT=Fixed;

这将在内部将所有 VARCHAR 转换为 CHAR。这也将使 MyISAM 表大约增大 50%,但读取性能有所提高,因为 VARCHAR 会更严格地检查字符串长度,而 CHAR 的长度是固定的。

或者,您可以在 MyISAM 表上运行 myisampack 以减少 MyISAM 表大小并创建新的只读格式。

这些是您可以对任何 MyISAM 表执行的一次性操作。由于 InnoDB 表的聚集索引布局,更改其行格式有点没用(原因 3 中有解释)

原因 #2:MyISAM 缓存更简单

MyISAM 仅缓存索引页。InnoDB 缓存数据页和索引页. 因此,您可以将 MyISAM 键缓存配置得小于 InnoDB 缓冲池。

原因 3:InnoDB 承担了太多的数据保护负担

InnoDB 具有在启动时即使没有任何问题也能进行崩溃恢复的功能(预防性)

InnoDB 总是针对数据行执行 MVCC。这为永远不会因 INSERT、UPDATE 或 DELETE 而变得杂乱的房子增加了额外的清洁工作。

InnoDB 总是执行双索引查找,特别是在使用非 UNIQUE 索引时。发生这种情况的原因在于InnoDB 的内部 rowid 索引与聚集索引紧密相关

您可以通过在 /etc/my.cnf 中添加以下内容来绕过 InnoDB 启动

[mysqld]
skip-innodb

这样 MySQL 就可以更快地重新启动。您还可以删除 /var/lib/mysql/ibdata1、/var/lib/mysql/ib_logfile0 和 /var/lib/mysql/ib_logfile1。

警告

如果数据足够小,请将 /var/lib/mysql 挂载到 RAM 磁盘上。然后,MyISAM 与 InnoDB 的比较就没有任何意义了。

答案2

http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/

如果您设置在内存中运行数据库,则 InnoDB 的性能将优于 myiasm,也就是说,如果您可以将其放入内存中。

相关内容