We are getting result proper but its taking too much time to execute.Can we optimise query which will take less time to execute.
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)
Thanks in advance.
Here is the optimized query:
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
I have Used * in query, you can do is select only required columns,one way of optimising
And MySQL has several existing solutions, check this Article
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
Try this :
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.