Pregunta

Estoy seguro de que hay una mejor manera de que pudiera estar haciendo esto. Tengo tres tablas principales con grandes cantidades de datos para ejecutar a través de: records_main, ventas y citas. Cada uno con cerca de 20.000 registros.

Necesito a unirse a estas tres tablas, así como algunos otros que arn't dos 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
 ";

Esto toma unos segundos, pero finalmente lo hace la carga. El último se unen puse aunque parece romper la consulta junto:

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

Después de esto tienen un conjunto límite y un grupo por

Cualquier cosa que pueda hacer para mejorar esto? Estoy usando esto con jqGrid, no está seguro de si eso ayuda

¿Fue útil?

Solución

Como una primera aproximación, trate de ejecutar la consulta en la base de datos utilizando la sintaxis de explicar. Esto le dará un análisis de la declaración y le dice, si se utiliza índices en absoluto. Si no utiliza índices o no suficientes índices, trate de añadir a las tablas.

Otros consejos

¿Usted ha intentado dar índice en todas las columnas que se dejan a acompañarte en?

Trate de darle índice para todos estos si no están ya declarados como índice

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top