簡體   English   中英

如何使用內部聯接和子查詢優化SQL查詢和返回計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM