Question

Je suis sûr qu'il ya une meilleure façon que je pourrais faire cela. J'ai trois tables principales avec de grandes quantités de données à exécuter par: records_main, les ventes et les rendez-vous. Chaque avec près de 20.000 dossiers.

Je dois joindre ces trois tables, ainsi que quelques autres qui arn't deux grandes.

    $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 ne finalement charge. La dernière jointure 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 un ensemble limite et un groupe par

Tout ce que je peux faire pour améliorer cela? J'utilise cela avec jqGrid, pas sûr si cela aide

Était-ce utile?

La solution

En tant que première approche, essayez d'exécuter la requête sur la base de données en utilisant la syntaxe EXPLIQUER. Cela vous donnera une analyse de la déclaration et vous indique, si elle utilise des index du tout. Si elle ne pas utiliser les index ou pas assez d'index, essayez de les ajouter aux tables.

Autres conseils

Avez-vous essayé index donnant sur toutes les colonnes que vous êtes à gauche devenant membre?

ESSAYEZ indice donnant à tous ces si elles ne sont pas déjà déclarés comme indice

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top