我在亚马逊云中的mysql上运行一个django系统,数据库默认是innodb。但是现在我想在几个表上放置一个全文索引进行搜索,这显然需要 myisam。
显而易见的解决方案是告诉 mysql 将 ALTER TABLE 更改为 myisam,但是这样做会有什么问题吗?
我想到的一个是我必须记住在我构建数据库的新版本时这样做,理论上这应该很少见,但似乎没有办法告诉 django 请设置表级别的存储引擎。我想我可以写一个迁移(我们使用南)。
还有其他我可能会丢失的东西吗?什么可能出错?
我在亚马逊云中的mysql上运行一个django系统,数据库默认是innodb。但是现在我想在几个表上放置一个全文索引进行搜索,这显然需要 myisam。
显而易见的解决方案是告诉 mysql 将 ALTER TABLE 更改为 myisam,但是这样做会有什么问题吗?
我想到的一个是我必须记住在我构建数据库的新版本时这样做,理论上这应该很少见,但似乎没有办法告诉 django 请设置表级别的存储引擎。我想我可以写一个迁移(我们使用南)。
还有其他我可能会丢失的东西吗?什么可能出错?
申请会通知吗?可能不是。
会不会造成问题?只有当事情出错时。MyISAM 不是事务存储引擎。如果您在事务中更改 MyISAM 表中的数据,然后必须回滚更改,则该表中的更改将不会回滚。自从我试图可怕地打破它已经有一段时间了,但我愿意打赌 MySQL 在这种情况发生时甚至不会发出警告。这将导致数据一致性问题。
您应该认真考虑外部搜索软件而不是全文索引,例如ElasticSearch(在应用程序级别集成)或Sphinx(在 MySQL 级别集成,但如果您直接使用 RDS 而不是 MySQL,我认为您不会'将能够使用它)。
以下可能会有所帮助:
使用 myisam 全文表索引回您的 innodb 表,例如: Build your system using innodb:...