Yavaş sorgu - Birden çok veri katılır ve

2 Cevap php

I'm sure there is a better way I could be doing this. I have three main tables with large amounts of data to run through: records_main, sales, and appointments. Each with close to 20,000 records.

Ben bu üç tablo yanı sıra iki büyük arn't birkaç diğerlerine katılmak gerekir.

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

Bu birkaç saniye sürer ama sonunda yük yok. Son koydum katılmak olsa da bir araya sorgu kırmaya görünüyor:

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

Bundan sonra ben bir sınır seti ve bir grup tarafından var

Bunu iyileştirmek için yapabileceğim bir şey? Eğer yardımcı olur eminim, jqGrid bu değil kullanıyorum

2 Cevap

Bir ilk yaklaşım olarak, EXPLAIN sözdizimini kullanarak veritabanı üzerinde sorgu çalıştırmak için deneyin. Bu size deyimi bir analizini vermek ve tüm dizinleri kullanıyorsa, size söyler. Yeterince dizinleri dizinleri kullanmak veya değilse, tablolar ekleyerek deneyin.

Eğer katılmadan SOL tüm sütunlar üzerinde dizin vererek denediniz mi?

Zaten endeks olarak beyan edilmemesi halinde bunlara endeksi vererek YTL