将MyISAM和InnoDB表与Doctrine混合使用

时间:2011-03-08 16:34:31

标签: php mysql doctrine innodb myisam

我目前正在尝试优化我们网站的搜索功能。我们使用doctrine作为我们的ORM,所有表目前都是InnoDB。下面是我们表结构的大致轮廓。

Table: Person
Columns:
  personId
  firstName
  middleName
  lastName

Table: Obituary
  obitId
  content  <--- LONG TEXT
  personId

从人到Ob告之间存在一对多的关系。

目前,用户可以输入一个人的姓名,我们的网站将搜索人员表中的搜索文本的出现(名字,姓氏,中间名等)以及ob告的内容。

现在,这种搜索很慢,因为ob告表的内容列是长文本。从InnoDB切换到MyISAM可以大大提高性能。目前,Person中的任何更改都会级联到Ob告。现在任何更新都是按小时进行的,所以写作并不像搜索那么普遍。

我的问题是,如果我将Obitary表切换到MyISAM,当我保存和更新Person记录时,这会对Doctrine产生任何负面影响吗?

1 个答案:

答案 0 :(得分:3)

Doctrine会注意到吗?可能不是。

会引起问题吗?只有当事情出错时。 MyISAM不是事务存储引擎。如果在事务内部更改MyISAM表,则必须回滚更改,它们将不会在该表中回滚。已经有一段时间了,因为我试图打破它可怕,但我愿意下注,当发生这种情况时,MySQL甚至不会发出警告。这将导致数据一致性问题。

如果您控制服务器,您应该认真考虑使用外部搜索软件来减轻数据库的负担,例如ElasticSearch(在应用程序级别集成)或Sphinx(在MySQL级别集成) )。