【问题标题】:Mixing MyISAM and InnoDB tables with Doctrine将 MyISAM 和 InnoDB 表与 Doctrine 混合使用
【发布时间】:2011-07-11 06:12:39
【问题描述】:

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

Table: Person
Columns:
  personId
  firstName
  middleName
  lastName

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

Person 与 Obituary 之间存在一对多关系。

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

现在,这个搜索很慢,因为讣告表的内容列是长文本。将其从 InnoDB 切换到 MyISAM 会大大提高性能。目前,Person 中的任何更改也会影响 Obituary。现在任何更新都是每小时发生一次,所以写作并不像搜索那么普遍。

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

【问题讨论】:

    标签: php mysql doctrine innodb myisam


    【解决方案1】:

    Doctrine 会注意到吗?应该不会吧。

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

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

    【讨论】:

    • 谢谢,这就是我的想法,但是将表更改为 MyISAM 的替代方法是我正在寻找的奖励。非常感谢!
    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2012-05-15
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多