我目前正在尝试优化我们网站的搜索功能。我们使用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产生任何负面影响吗?
答案 0 :(得分:3)
Doctrine会注意到吗?可能不是。
会引起问题吗?只有当事情出错时。 MyISAM不是事务存储引擎。如果在事务内部更改MyISAM表,则必须回滚更改,它们将不会在该表中回滚。已经有一段时间了,因为我试图打破它可怕,但我愿意下注,当发生这种情况时,MySQL甚至不会发出警告。这将导致数据一致性问题。
如果您控制服务器,您应该认真考虑使用外部搜索软件来减轻数据库的负担,例如ElasticSearch(在应用程序级别集成)或Sphinx(在MySQL级别集成) )。