[英]How to optimize SQL query and return count using inner join and subquery
我們得到的結果是正確的,但執行時間過多。能否優化查詢以減少執行時間。
SELECT c.client_id
FROM client_master c
INNER JOIN user_visit_record u ON u.client_id = c.client_id
WHERE c.dept_id ='1'
AND c.branch_id='1'
AND c.client_status IN('Hot','Warm','Cold','Quotation')
AND u.next_followup_date < '2017-06-01'
AND u.visit_id IN
(SELECT max(visit_id)
FROM user_visit_record
WHERE client_id=c.client_id)
提前致謝。
這是優化的查詢:
SELECT c.client_id
FROM client_master c
JOIN (SELECT * FROM user_visit_record u ORDER BY u.visit_id DESC) AS t ON t.client_id = c.client_id
WHERE c.dept_id ='1'
AND c.branch_id='1'
AND c.client_status IN('Hot','Warm','Cold','Quotation')
AND t.next_followup_date < '2017-06-01'
GROUP BY t.clientid
我在查詢中使用*,您可以做的是僅選擇必填列,一種優化方式
和MySQL有幾個現有的解決方案,檢查此文章
SELECT c.client_id
FROM
(SELECT *
FROM client_master
WHERE dept_id ='1'
AND branch_id='1'
AND IN('Hot','Warm','Cold','Quotation')) AS c
INNER JOIN
(SELECT *
FROM user_visit_record
WHERE next_followup_date < '2017-06-01'
AND visit_id IN
(SELECT max(visit_id)
FROM user_visit_record
WHERE client_id=c.client_id)) AS u
ON u.client_id = c.client_id
嘗試這個 :
SELECT client_id FROM
(
SELECT client_id
FROM client_master
WHERE dept_id ='1' AND branch_id='1' AND client_status IN('Hot','Warm','Cold','Quotation')
) AS c
NATURAL JOIN
(
SELECT client_id
FROM user_visit_record
INNER JOIN (
SELECT client_id, max(visit_id) as max_visit
FROM user_visit_record
GROUP BY client_id
) AS max_user_visit
ON (user_visit_record.client_id = max_user_visit.client_id)
AND (user_visit_record.visit_id = max_visit)
WHERE next_followup_date < '2017-06-01'
) AS u
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.