Optimere MySQL-streng
Hej EksperterJeg har den her motherfucker af en databasestreng, som i min konkurrence er begyndt at loade meget langsomt, da der er kommet rigtig mange deltagere, og hver deltager uploader et billede, som der kan stemmes på. Så min database skal både holde styr på deltagere, deres billeder, stemmer på de forskellige billeder, OG om den nuværende IP har stemt på et givent billede.
Derfor ville jeg høre, om nogen af jer kunne hjælpe mig med at skære ned på MySQL-strengen, så databasekaldet ikke var så tungt.
---
SELECT
cp.id,
cp.name,
i.image_url,
i.image_thumbnail_url,
cp.instagram_link,
cp.is_from_instagram,
COUNT(cpv.id) AS votes,
COUNT(cpvy.id) AS your_votes,
cp.time_created
FROM
competition_photos AS cp
LEFT JOIN (
SELECT
id,
image_url,
image_thumbnail_url
FROM
images
) AS i
ON
cp.image_id = i.id
LEFT JOIN (
SELECT
id,
competition_photo_id
FROM
competition_photo_votes
) AS cpv
ON
cp.id = cpv.competition_photo_id
LEFT JOIN (
SELECT
id,
competition_photo_id
FROM
competition_photo_votes
WHERE
ip = "' . $user_ip . '"
) AS cpvy
ON
cp.id = cpvy.competition_photo_id
WHERE
cp.is_hidden = 0
GROUP BY
cp.id
ORDER BY
votes DESC
LIMIT
1, 60
---
Jeg tænker fx at man måske ikke behøver 1 left join for først at hente samlede antal stemmer for et givent billede, og derefter endnu 1 left join for at finde ud af, om brugerens IP har stemt på det givne billede.
Jeg håber, nogle af jer har bud på, hvad jeg kan gøre anderledes.
Med venlig hilsen
Tobias