【发布时间】:2015-10-25 17:14:12
【问题描述】:
我有一个查询多次加入同一个表 (user_status) 以拉回不同的状态信息。此查询的总体目标是将其转换为视图。我相信这些连接会导致查询运行时出现延迟,从而导致查询挂起。我正在尝试尽可能优化查询,但除了拥有所有这些连接之外,我不知道另一种方法。连接是左连接,因为我也想看到返回的空值。 where 子句过滤器将返回最多 370 天前的时间线的数据。我将在下面粘贴我的查询;任何建议将不胜感激:
SELECT
c.id AS customer_id,
c.priority AS priority,
c.create_date AS create_date,
u.login AS login,
c.due_date AS due_date,
ts.user_status AS status,
cts.status AS current_status,
cts.id AS status_id,
w.name AS workflow_name,
c.summary AS summary,
cfi.added_by AS acknowledged_by,
CONCAT(dispatch_user.first_name,' ',dispatch_user.last_name) AS dispatch_user,
CONCAT(dispatched_user.first_name,' ',dispatched_user.last_name) AS acknowledged,
CONCAT(last_update_by.first_name,' ',last_update_by.last_name) AS manager_last_updated_by,
c.updated_date AS updated_date,
CONCAT(u.first_name,' ',u.last_name) AS last_updated_by,
ts_new.status_date AS new_dt,
ts_initial.status_date AS initial_dt,
ts_assigned.status_date AS assigned_dt,
ts_investigating.status_date AS investigating_dt,
ts_resolved.status_date AS resolved_dt,
ts_pending_closure.status_date AS pending_closure_dt,
ts_closed.status_date AS closed_dt,
IF(user_visit.status IS NOT NULL, 'Yes', 'No') AS user_visit,
fftr.reason AS reason,
fftr.notes AS resolution,
FROM customer c
JOIN form1 AS tcv ON (c.id = tcv.customer_id)
JOIN user_status AS cts ON (c.current_status_id = cts.id)
JOIN user AS u ON (u.id = cts.status_by_id)
LEFT JOIN user_status AS ts ON (ts.workflow_state = cts.status)
LEFT JOIN change_info AS cfi ON cfi.customer_id = c.id
LEFT JOIN user_status AS dispatch_status ON dispatch_status.customer_id = c.id AND dispatch_status.status = 'FTD'
LEFT JOIN user AS dispatch_user ON dispatch_user.id = dispatch_status.status_by_id
LEFT JOIN user_status AS assigned_ft_dis ON assigned_ft_dis.customer_id = c.id AND assigned_ft_dis.status = 'ASSIGNED - FTD'
LEFT JOIN user_status AS assigned_ft_dis_rx ON assigned_ft_dis_rx.customer_id = c.id AND assigned_ft_dis_rx.status = 'ASSIGNED - FT'
LEFT JOIN user AS dispatched_user ON dispatched_user.id = assigned_ft_dis_rx.status_by_id
LEFT JOIN user_status AS last_update_status ON last_update_status.id = c.current_status_id
LEFT JOIN user last_update_by ON last_update_by.id = last_update_status.status_by_id
LEFT JOIN user_status AS ts_new ON c.id = ts_new.customer_id AND ts_new.status LIKE 'NEW%'
LEFT JOIN user_status AS ts_initial ON c.id = ts_initial_diagnosis.customer_id AND ts_initial_diagnosis.status LIKE 'INITIAL SOLUTION%'
LEFT JOIN user_status AS ts_assigned ON c.id = ts_assigned.customer_id AND ts_assigned.status LIKE 'ASSIGNED%'
LEFT JOIN user_status AS ts_investigating ON c.id = ts_investigating.customer_id AND ts_investigating.status LIKE 'INVESTIGATING%'
LEFT JOIN user_status AS ts_resolved ON c.id = ts_resolved.customer_id AND ts_resolved.status LIKE 'RESOLVED%'
LEFT JOIN user_status AS ts_pending_closure ON c.id = ts_pending_closure.customer_id AND ts_pending_closure.status LIKE 'PENDING CLOSURE%'
LEFT JOIN user_status AS ts_closed ON c.id = ts_closed.customer_id AND ts_closed.status LIKE 'CLOSED%'
LEFT JOIN user_status AS user_visit ON c.id = user_visit.customer_id AND user_visit.status = 'RESOLVED – FT'
LEFT JOIN change AS tc_fftr ON c.id = tc_fftr.customer_id AND tc_fftr.contents LIKE 'Resolution%'
LEFT JOIN form4 AS fftr ON fftr.change_id = tc_fftr.id
WHERE
c.create_date >= DATE_SUB(NOW(),INTERVAL 370 DAY)
【问题讨论】:
-
运行成功过吗?发布说明计划