Je cherche à optimiser la requête MySQL ci-dessous. Y a-t-il un index multi-colonnes qui aurait plus de succès? J'ai essayé (created_date
, rep_id
) sans chance. Toutes les suggestions pour accélérer cette requête sont appréciées.Optimisation de la requête MySQL avec plage et jointures multiples
SELECT
customer.rep_id AS `ID`,
COUNT(*) AS Count,
rep.first_name,
rep.last_name
FROM customer
INNER JOIN appointment ON customer.id = appointment.customer_id
INNER JOIN rep ON customer.rep_id = rep.user_id
INNER JOIN user ON rep.user_id = user.id
WHERE customer.rep_id != 0
AND customer.saved = 0
AND customer.deleted = 0
AND customer.created_date >= '2017-01-01'
AND customer.created_date < '2017-02-01'
AND appointment.current = 1
AND appointment.realStatus IS NOT NULL
AND ( appointment.realStatus not in('rescheduled','cancelled')
OR (appointment.closed_by_id IS NULL
OR customer.rep_id != appointment.closed_by_id)
)
AND user.knocks = 1
AND user.deleted = 0
GROUP BY customer.rep_id
ORDER BY `Count` DESC
LIMIT 50
est ici la sortie EXPLAIN
:
id: 1
select_type: SIMPLE
table: customer
type: range
possible_keys: PRIMARY,rep_id,created_date
key: NULL
key_len: NULL
ref: NULL
rows: 354846
Extra: Using where; Using temporary; Using filesort
id: 1
select_type: SIMPLE
table: rep
type: ref
possible_keys: user_id
key: user_id
key_len: 4
ref: customer.rep_id
rows: 1
Extra: Using index condition
id: 1
select_type: SIMPLE
table: user
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: rep.user_id
rows: 1
Extra: Using where
id: 1
select_type: SIMPLE
table: appointment
type: ref
possible_keys: realStatus, customer_id, created_date
key: customer_id
key_len: 4
ref: customer.id
rows: 1
Extra: Using where
Avez-vous essayé d'utiliser entre pour la plage de dates? Je ne sais pas si cela le ferait commencer à utiliser l'index ou non, mais ça vaut le coup d'essayer. –
Si vous utilisez une plage de dates pour un mois civil, un index sur l'année-mois uniquement de customer.created_date autoriserait un nombre calculé au lieu d'une plage pour la requête mensuelle. –
Est-ce que rep est une vue de contact? – ysth