Je vais avoir deux tables, je dois sélectionner des données jointes à la fois d'entre euxMySQL - SELECT + JOIN + ORDER BY la performance
SELECT f.*
FROM file_data f
JOIN subscriptions s ON f.uid = s.elementid
WHERE s.uid = 119762 AND f.private=0
ORDER BY f.date DESC
Maintenant, même pour un petit ensemble de données, la requête reprend une seconde. Ceci est dû au fait que 'filesort' et 'temporary' sont utilisés sur les "abonnements", provoqués par ORDER BY f.date (supprimer cette condition fait chuter l'heure sous 0.01s)
Quelqu'un peut-il me dire comment accélérer? la requête?
est ici le résultat de EXPLIQUER
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE s ref uid_elementid uid_elementid 4 const 171 Using index; Using temporary; Using filesort
1 SIMPLE f ref uid_uname uid_uname 5 s.elementid 22 Using where
il y a déjà index sur file_data.date, je ne sais pas pourquoi pas répertorié comme clé possible ... Lorsque – migajek
nombre d'enregistrements est bas, l'index ne va pas aider. – Aliostad
Vous devez également mettre un index sur f.uid, s.elementid, s.uid et f.private. Et en fonction de ce que vous aimez sélectionner un LEFT JOIN pourrait être suffisant et plus rapide. – JochenJung