jointures Pendant l'exécution de cette requête:Tri des résultats de
SELECT
a.id,
pub.name AS publisher_name,
pc.name AS placement_name,
b.name AS banner_name,
a.lead_id,
a.partner_id,
a.type,
l.status,
s.correctness,
a.landing_page,
t.name AS tracker_name,
a.date_view,
a.date_action
FROM actions AS a
LEFT JOIN publishers AS pub ON a.publisher_id = pub.id
LEFT JOIN placements AS pc ON pc.publisher_id = pub.id
LEFT JOIN banners AS b ON b.campaign_id = a.campaign_id
LEFT JOIN leads l ON
l.lead_id = a.lead_id
AND l.created = (
SELECT MAX(created) from leads l2 where l2.lead_id = l.lead_id
)
LEFT JOIN statuses AS s ON l.status = s.status
LEFT JOIN trackers AS t ON t.id = a.tracker_id
LIMIT 10
Je suis capable de trier par toutes les colonnes de la table actions
. Cependant quand j'essaye par exemple ORDER BY b.name
(du banners
tableau, joint sur actions.banner_id
) ou ORDER BY l.lead_id
(joint de leads
sur l'état plus complexe comme vu ci-dessus) MySQL court l'interrogation pendant un temps loooong (la plupart des tables ont des dizaines de milliers d'enregistrements). Est-il possible, en termes de performances, de trier par colonnes jointes?
Vous pouvez améliorer vos performances en ajoutant une clause where afin de ne pas essayer de trier autant d'enregistrements. –
@DanBracuk, je ne pense pas que ce soit possible dans ce cas - je veux trier les résultats ici, pas les filtrer. – acid
Je suppose que vous avez un index dans tous les champs où vous avez appliqué la jointure. Essayez aussi la commande 'explain' pour voir comment fonctionne la requête. – jcho360