質問

私はこれを行うことができ、より良い方法があると確信しています。私は経由で実行するために、大量のデータを持つ三つの主要なテーブルを持っています: records_main、販売、および予定。 20,000レコードに近いと各ます。

私は、これら3つのテーブルだけでなく、大規模な2をarn't他のいくつかに参加する必要があります。

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

これは、数秒かかりますが、最終的には負荷を行います。最後には、私も一緒にクエリを破るように見える入れ加入ます:

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

この後、私は

によって制限セットとグループを持っています

私はこれを改善するために何かできること?私はjqgridでこれを使用しています、わからないことがあれば役立ちます。

役に立ちましたか?

解決

最初のアプローチとして、EXPLAIN構文を使用してデータベースにクエリを実行してみてください。これは、あなたの文の解析を与え、それがすべてでインデックスを使用している場合、あなたに伝えます。それは、インデックスまたは十分でないインデックスを使用していない場合は、テーブルにそれらを追加してみます。

他のヒント

あなたはあなたが参加残されているすべての列にインデックスを与えてみました?

彼らはすでにインデックスとして宣言されていない場合は、

すべてのこれらの指標を与えるTRY

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top