我的数据库中有几个表,这些表需要大量的连接来处理所涉及的查询,并且表会经常更新。关于从mysql搜索过渡到sphinx搜索,我想问一些不同的问题。
我正在尝试使用Sphinx来执行查询(而不是全文搜索),因为mysql引擎太慢,因为涉及大量的连接。
所以我的第一个问题是,通过串联将字段转换为文本,将sphinx用于非全文搜索是否有意义?
如果建议使用sphinx,我如何使用它来跨所有这些表执行复杂查询。我研究了很多,并提出了这三种选择,并希望你对哪种选择最佳。
- 由于Sphinx没有JOIN,所以将所有表反规范化为一个表(或视图),然后在其上运行sphinx索引器。这似乎是最低效的方式,因为它会导致数十亿行,而且其他不涉及加入所有表的查询都会受到严重阻碍。
- 分别在每个表上创建sphinx索引。但这不允许我将这些索引用于需要跨表连接的查询。要解决这个问题,请在要连接的列上使用sql_joined_field,sphinx将执行连接过程。
- 将JOIN放在构建索引的sql_query中。这些表保持规范化,但在构建索引时会对其进行去规范化。这似乎是一个很好的解决方案。但是父表上会有很多更新/删除/插入。因此,相应地更新spinx索引将是一项棘手或乏味的业务,并且这会在太多更新后阻碍长期性能吗?如何处理父表中的更新并有效地修改sphinx索引。
醇>
我想知道什么是解决问题的更好方法。很抱歉这个问题很长,但我想汇总我的研究,以便在接下来的答案中不再重复。