Je suis sûr qu'il y a une meilleure façon de le faire. J'ai trois tables principales avec de grandes quantités de données à parcourir: records_main, ventes et rendez-vous. Chacun avec près de 20 000 enregistrements.Requête lente - Jointures multiples et beaucoup de données
J'ai besoin de joindre ces trois tables ainsi que quelques autres qui ne sont pas deux grands.
$SQL = "SELECT DISTINCT appointments.id AS aid, appointments.date, appointments.estimate_price, appointments.next_action, appointments.next_action_date, appointments.result, appointments.result_type, appointments.notes,
customer.id AS cid, customer.homeowner1_fname, customer.homeowner1_lname, customer.address, customer.city, customer.state, customer.zipcode, customer.phone1, customer.phone1_type, customer.phone2, customer.phone2_type, customer.phone3, customer.phone3_type, customer.phone4, customer.phone4_type, customer.phone5, customer.phone5_type, customer.lead_source, customer.lead_category, customer.primary_interest, customer.secondary_interest, customer.additional_interest1, customer.additional_interest2,
originator.employee_id AS originator_employee_id,originator.fname AS originator_fname,originator.lname AS originator_lname,
setter.employee_id AS setter_employee_id,setter.fname AS setter_fname,setter.lname AS setter_lname,
resetter.employee_id AS resetter_employee_id, resetter.fname AS resetter_fname, resetter.lname AS resetter_lname,
salesrep.employee_id AS salesrep_employee_id, salesrep.fname AS salesrep_fname, salesrep.lname AS salesrep_lname,
salesrep2.employee_id AS salesrep2_employee_id, salesrep2.fname AS salesrep2_fname, salesrep2.lname AS salesrep2_lname
FROM
core_records_appointments as appointments
INNER JOIN core_records_main as customer ON appointments.customer = customer.id
LEFT JOIN core_employees_main as originator ON appointments.originator = originator.id
LEFT JOIN core_employees_main as setter ON appointments.setter = setter.id
LEFT JOIN core_employees_main as resetter ON appointments.resetter = resetter.id
LEFT JOIN core_employees_main as salesrep ON appointments.sales_representative = salesrep.id
LEFT JOIN core_employees_main as salesrep2 ON appointments.sales_representative2 = salesrep2.id
";
Cela prend quelques secondes, mais finalement charge. La dernière rejoins je mets semble bien rompre la requête ensemble:
LEFT JOIN core_records_sales as sales ON appointments.day = sales.day_sold AND appointments.customer = sales.customer
Après cela, j'ai une limite fixée et un groupe par
Tout ce que je peux faire pour améliorer cela? J'utilise ceci avec jqgrid, je ne sais pas si cela aide
Je suppose que lorsque je tente de faire correspondre les sales.day et appts.day il est coincé parce qu'il n'y a pas de clé. Je n'ai jamais eu plus d'une clé dans une table. Comment ferais-je pour mettre ça en place? Cela causerait-il un problème avec quoi que ce soit d'autre? C'est à dire: l'identifiant pour les deux sont les clés primaires – kilrizzy
Pourriez-vous ajouter la structure des tables à la question? (DESCRIBE) Cela aiderait beaucoup à répondre à la question –