I suspect the problem is that I'm using the wrong type of joins. Essentially the only data I actually want returned, is from the reco table with only 2 pieces of data from the user table and 1 piece from the user status table.
The rest of the joins and conditions are for the purpose of either filters or inclusions. eg. Include recommendations from user 144, or where a users status id is 4, but then there's 'requirements' like the reco must be active, the user who posted the reco must be active.
Any suggestions would be GREATLY appreciated, I need to bring this execution time down to under 10 seconds. :|
Code:SELECT r.iRecommendationId, r.iUserId, r.iCategoryId, r.fLat as rfLat, r.fLon as rfLon, r.vNeed_To_Know, round((6371 * acos(cos(radians(43.64830)) * cos(radians(r.fLat)) * cos(radians(r.fLon) - radians(- 79.402400)) + sin(radians(43.64830)) * sin(radians(r.fLat)))), 2) AS recommendationDistance, substring(r.vRecommendation, 1, 42) AS vRecommendation, r.iRerecommendId, r.vRPicture, r.vMetaDataObject, r.vUrl, r.vLocation, r.root, u.vPicture, u.vUserName, s.imStatusId FROM msy_recommendations AS r INNER JOIN msy_users AS u ON r.iUserId = u.iUserId AND u.eStatus = 'Active' INNER JOIN msy_featured_user as f ON f.iUserId = r.iUserId INNER JOIN msy_users_status AS s ON r.iUserId = s.iUserId LEFT OUTER JOIN msy_subscriptions as sub ON sub.imuid = r.iUserId LEFT JOIN msy_bookmarks as b ON (b.iRecommendationId = r.iRecommendationId AND b.iUserId = 853) WHERE (r.eStatus = 'Active' AND r.eRerecommend = 'Enable' AND r.iCategoryId IN(3,5,6)) AND (r.iUserId = 144 OR s.imStatusId = 4 OR (sub.iUserId = 853 AND sub.eStatus = 'Active')) GROUP BY r.vUrl ORDER BY recommendationDistance ASC LIMIT 0, 25


Reply With Quote


Bookmarks