SQL 쿼리를 최적화하는 중입니다. 나는 그것을 상당히 청소했지만 여전히해야 할 일이있다. 아래를 참조 쿼리하위 쿼리를 사용하지 않고 쿼리를 다시 작성하십시오.
경기 TBL : ID, fb_share_points, tw_share_points
comp_mapper TBL : 아이디, referrer_user_id, user_subscription_id, has_fb_shared, has_tw_shared,
SELECT
IF (cm.has_fb_shared = 1, IFNULL(c.fb_share_points,0), 0)
+ IF (cm.has_tw_shared = 1, IFNULL(c.tw_share_points,0), 0)
+ (SELECT count(*) FROM comp_mapper as cm2
WHERE cm2.comp_id = cm.comp_id
AND cm2.referrer_user_id = us.user_id)
as shares
FROM competitions AS c
JOIN comp_mapper as cm ON cm.competition_id = c.id
JOIN user_subscription as us on cm.user_subscription_id = us.id
WHERE c.id = :id
ORDER BY shares DESC
LIMIT :limit
을 competition_id 사용자가 언급 될 때, 추천 사용자의 ID는 경쟁 참가자의 referrer_user_id 열에 배치됩니다. 하위 쿼리는 경쟁 참여자 중 몇 명이 다른 사용자를 추천했는지 계산합니다. 나는 현재 쿼리를 실행하는 데 꽤 오랜 시간이 걸리기 때문에 서브 쿼리없이 다른 방법으로이 쿼리를 작성하려고한다. 누구든지 제안이나 권장 사항이 있다면 공유하십시오!
우수 답변, 정말 고마워요! 더 많은 열이 있었고, 나는 그 점을 지키기 위해 그들을 제외 시켰습니다. – Rijndael