我在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
如您所见,我需要获得平均评级公司的结果。后来我会根据平均评分对这些公司进行排序。但是,当我运行索引器--rotate时,它会卡住并且服务器正在关闭。你知道这是获得总价值并按其排序的正确方法,还是我应该用另一种方式?你知道如何按总价值排序的其他方法吗?
谢谢。
答案 0 :(得分:0)
本身你的查询看起来很好。
但它的重量级很重。查询,所以mysql可能会使用大量资源来尝试运行'它
尝试在查询上使用EXPLAIN
(独立于sphinx运行它),看看是否缺少任何重要索引。
你可以在查询的末尾添加ORDER BY NULL
,这将允许mysql稍快一点运行(因为它不需要对结果进行排序) - sphinx不需要任何特定的结果订购。
Sphinx支持运行Ranged Queries
,有效地打破了“大'查询很多小的。然后,每个单独的查询都不太可能重载mysql。
http://sphinxsearch.com/docs/current.html#conf-sql-query-range
如果还在苦苦挣扎,可以通过临时表来计算平均评分。建议先尝试远程查询。