Je cette requête MySQL qui est très lent, je suppose à cause de tout le JOIN (il semble compliqué, mais il est une question de beaucoup de tables):Améliorez cette très lent MySQL SELECT
SELECT DISTINCT doctors.doc_id,
doctors.doc_user,
doctors.doc_first,
doctors.doc_last,
doctors.doc_email,
doctors.doc_notes,
titles.tit_name,
specializations.spe_name,
activities.act_name,
users.use_first,
users.use_last,
(SELECT COUNT(*) FROM locations WHERE locations.loc_doctor = doctors.doc_id) AS loc_count,
(SELECT COUNT(*) FROM reception WHERE reception.rec_doctor = doctors.doc_id) AS rec_count,
(SELECT COUNT(*) FROM visits INNER JOIN reports ON visits.vis_report = reports.rep_id WHERE visits.vis_doctor = doctors.doc_id AND reports.rep_user LIKE '%s') AS vis_count
FROM
doctors
INNER JOIN titles ON titles.tit_id = doctors.doc_title
INNER JOIN specializations ON specializations.spe_id = doctors.doc_specialization
INNER JOIN activities ON activities.act_id = doctors.doc_activity
LEFT JOIN locations ON locations.loc_doctor = doctors.doc_id
INNER JOIN users ON doctors.doc_user = users.use_id
WHERE
((doctors.doc_last LIKE %s) OR (doctors.doc_first LIKE %s) OR (doctors.doc_email LIKE %s))
AND doctors.doc_user LIKE %s
AND locations.loc_province LIKE %s
AND doctors.doc_specialization LIKE %s
AND doctors.doc_activity LIKE %s
ORDER BY %s
Toutes les % s sont des paramètres dans une fonction PHP sprintf()
La chose la plus importante à noter est ... que je n'ai pas d'index sur MySQL! Je suppose que je peux accélérer le processus en ajoutant quelques index ... mais quoi et où? Il y a tellement de jointures et de paramètres de recherche que je suis dans la confusion quant à ce qui serait efficace :-)
Pouvez-vous m'aider? Merci d'avance!
peut vous envoyer un plan d'exécution? 'EXPLAIN query' –