2
我试图实现slope one算法。我有系统在线咨询,专家可以咨询用户。 Expert是type = 2的用户。而且我需要提供“与这位专家咨询过的人的咨询”。对于expert_id1和expert_id2,子查询返回序列为0(未查询),1(查询)的数组,但该序列由超过100k个值组成,并且此查询执行速度非常慢。请任何想法来优化此查询。斜率一种算法,优化查询
SELECT e1.id as expert_id1, e2.id as expert_id2,
(
SELECT array_accum(c.consulted) FROM (
SELECT CASE WHEN (c.id is null) THEN 0 ELSE 1 END as consulted
FROM co_user u
CROSS JOIN user e
LEFT JOIN consultation c ON e.id = c.expert_id and c.user_id = u.id
WHERE e.type = 2 AND e.id = e1.id) as c
) as expert_id1_consulted,
(
SELECT array_accum(c.consulted) FROM (
SELECT CASE WHEN (c.id is null) THEN 0 ELSE 1 END as consulted
FROM user u
CROSS JOIN user e
LEFT JOIN consultation c ON e.id = c.expert_id and c.user_id = u.id
WHERE e.type = 2 AND e.id = e2.id) as c
) as expert_id2_consulted
FROM user e1
CROSS JOIN user e2
WHERE e1.type = 2 AND
e2.type = 2 AND
e2.id > e1.id
ORDER BY e1.id
你能否更新表结构和一些示例数据的问题? – J0HN
编辑您的问题,并粘贴SQL CREATE TABLE和INSERT语句。很少有人愿意从你的查询中反转你的表格。 –
也请加解释分析输出。 –