如果将默认存储引擎设置从 InnoDB 切换到 MyISAM,是否会出现重大性能问题?

如果将默认存储引擎设置从 InnoDB 切换到 MyISAM,是否会出现重大性能问题?

最近,我们在数据库服务器上升级了 MySQL 版本,几乎所有的表都在 MyISAM 中,但在 my.ini 中我们设置了

--default-storage-engine=InnoDB

但现在我们想将此设置更改为 MyISAM,因为以前我们使用 MyISAM 作为默认引擎

--default-storage-engine=MyISAM

动态更改默认存储引擎是一种好的做法吗?这样可行吗?即使可行,是否会出现重大性能问题?

这是我们使用该数据库的遗留应用程序,这就是为什么几乎所有的表都使用数据库管理系统引擎。我们没有在应用程序的任何地方使用 DB 事务。

MySQL 版本:8.0 操作系统:Windows Server

答案1

更改默认存储引擎只会影响使用CREATE TABLE语句创建的新表,而无需指定数据库引擎。

因此,除非您计划创建新表,否则配置文件中的设置没有区别。

答案2

如果可以同时运行多个查询(例如多用户环境),那么您应该计划将所有表迁移到 InnoDB。我还会在 Linux 机器上运行 MySQL。

要更改引擎,您应该使用 mysqldump 导出数据库,然后在转储中更改引擎并将其导入回来。您还可以ALTER TABLE mytable ENGINE=InnoDB;对架构的每个表使用。不要更改mysql架构的数据库引擎。

答案3

MyISAM 没有事务 ACID 属性。我会改用 InnoBD。我可能搞错了。

答案4

default_storage_engine仅适用于新创建的表。也就是说,更改设置不会更改现有表。

要实际更改表,请使用ALTER TABLE name ENGINE=engine(对于每个表)。

在转换之前和转换之后执行以下任一操作以确保转换已发生:

SHOW TABLE STATUS;   -- has a column for "engine"

SHOW CREATE TABLE name;   -- shows the engine= clause at the end

也许在 InnoDB 中唯一可能明显变慢的任务是

SELECT COUNT(*) FROM name;

没有WHERE子句。你经常使用吗?我们可以讨论解决方法。对于你发现速度较慢的任何其他查询也是如此。

我强烈建议您在 InnoDB 从 MySQL 中删除之前迁移到它。迁移问题: http://mysql.rjweb.org/doc.php/myisam2innodb

相关内容