Frage

Ich bin sicher, dass es eine bessere Art, wie ich dies tun könnte. Ich habe drei Haupttabellen mit großen Datenmengen zu durchlaufen: records_main, Vertrieb und Termine. Jeder mit knapp 20.000 Datensätze.

Ich brauche diese drei Tabellen sowie ein paar andere zu verbinden, die arn't zwei große.

    $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
 ";

Das dauert ein paar Sekunden, aber schließlich tut Last. Die letzte schließe ich mich setzen scheint, obwohl die Abfrage zu brechen zusammen:

LEFT JOIN core_records_sales as sales ON appointments.day = sales.day_sold AND appointments.customer = sales.customer

Danach habe ich eine Grenze setzen und eine Gruppe von

Alles, was ich tun kann, dies zu verbessern? Ich verwende diese mit jqGrid, nicht sicher, ob das hilft

War es hilfreich?

Lösung

Als erster Ansatz, versuchen, die Abfrage auf der Datenbank auszuführen, um die Syntax EXPLAIN verwenden. Dies gibt Ihnen eine Analyse der Aussage und sagt Ihnen, wenn es Indizes überhaupt verwendet. Wenn es nicht Indizes verwenden oder nicht genug Indizes, versucht, sie zu den Tabellen hinzugefügt wird.

Andere Tipps

Haben Sie versucht, von Index auf allen Spalten Sie LINKE schließen sich an?

Versuchen Sie, alle diese von Index, wenn sie nicht bereits als Index erklärt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top