首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sphinxsearch按聚合值排序

Sphinxsearch按聚合值排序
EN

Stack Overflow用户
提问于 2014-12-11 22:37:45
回答 1查看 182关注 0票数 1

我的sphinx.conf中有这样一个查询:

代码语言:javascript
复制
sql_query  = \
SELECT c.id as cid, s.active AS subscriptionActive, c.icof, c.firma, a.textadr, \
r.textz, cc.value, cc.title, cai.description, cai.vat, cai.name, cai.address, AVG(rev.rating) as companyAverageRating \
FROM companies as c \
LEFT JOIN addresses as a ON c.icof = a.icof \
LEFT JOIN rosformaf r ON c.rosformaf = r.kodzaz \
LEFT JOIN company_contacts as cc ON c.id = cc.company_id \
LEFT JOIN company_add_info as cai ON c.id = cai.company_id \
LEFT JOIN subscriptions as s ON c.id = s.company_id \
LEFT JOIN reviews as rev ON c.id = rev.company_id \
GROUP BY c.id \

sql_attr_float = companyAverageRating
sql_attr_bool = subscriptionActive

如你所见,我需要获得平均评级的公司的结果。稍后,我将按平均评级降序对这些公司进行排序。但是当我运行indexer --rotate时,它就卡住了,服务器就会宕机。你知道这是获取聚合值并按其排序的正确方法吗,或者我应该使用另一种方法?你知道如何按聚合值排序的其他方法吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 02:54:53

就其本身而言,查询看起来很好。

但这是一个“繁重”的查询,所以mysql可能会使用大量的资源来“运行”它。

  1. 尝试对查询使用EXPLAIN (独立于sphinx运行),以查看是否缺少任何重要的索引。
  2. 你可以将ORDER BY NULL添加到查询的末尾,这将允许mysql更快地运行它(因为它不需要对结果进行排序)- sphinx不需要以任何特定的顺序显示结果。
  3. Sphinx支持运行Ranged Queries,它可以有效地将“大”查询分解为许多小查询。这样,每个单独的查询就不太可能使mysql过载。http://sphinxsearch.com/docs/current.html#conf-sql-query-range
  4. If仍在苦苦挣扎,可以通过临时表格计算平均收视率。建议先尝试范围查询。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27425368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档