我的sphinx.conf中有这样一个查询:
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时,它就卡住了,服务器就会宕机。你知道这是获取聚合值并按其排序的正确方法吗,或者我应该使用另一种方法?你知道如何按聚合值排序的其他方法吗?
谢谢。
发布于 2014-12-12 02:54:53
就其本身而言,查询看起来很好。
但这是一个“繁重”的查询,所以mysql可能会使用大量的资源来“运行”它。
EXPLAIN (独立于sphinx运行),以查看是否缺少任何重要的索引。ORDER BY NULL添加到查询的末尾,这将允许mysql更快地运行它(因为它不需要对结果进行排序)- sphinx不需要以任何特定的顺序显示结果。Ranged Queries,它可以有效地将“大”查询分解为许多小查询。这样,每个单独的查询就不太可能使mysql过载。http://sphinxsearch.com/docs/current.html#conf-sql-query-rangehttps://stackoverflow.com/questions/27425368
复制相似问题