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