Optimizing query for MySql Database

John Watson :

I need to optimize this query to run with minimum time and retrieve the record.

SELECT DISTINCT cp.sno,cp.case_sno,c.case_no,c.cus_case_no,c.institued_date,
       c.ins_sno,cp.case_stage,c.emp_sno,c.objections,cp.wb_sno,cp.is_decided
FROM cases c,cases_proceedings cp 
WHERE c.sno = cp.case_sno 
      AND cp.is_decided = 1 AND cp.is_current = 1 
      AND c.sno IN(SELECT DISTINCT r.case_sno FROM recordroom r 
                   WHERE c.sno = r.case_sno GROUP BY r.case_sno 
                   ORDER BY r.case_sno) 
GROUP BY cp.case_sno
ORDER BY cp.case_sno ASC

Scenario of the query is that:

   Cases Table is the master table having PK on sno
   cases_proceedings is the child table which repeats Cases' table sno as case_sno
   Recordroom table is also the child table which keeping cases' table sno as case_sno

Problem: The above query takes 17.x seconds to execute which is obviously more than normal time...

Anybody know how to optimize this to get the fruitful result with minimum time?

Slava Rozhnev :

In first iteration the inner query can be optimized by removing sorting and grouping:

SELECT DISTINCT cp.sno,cp.case_sno,c.case_no,c.cus_case_no,c.institued_date,
       c.ins_sno,cp.case_stage,c.emp_sno,c.objections,cp.wb_sno,cp.is_decided
FROM cases c,cases_proceedings cp 
WHERE c.sno = cp.case_sno 
      AND cp.is_decided = 1 AND cp.is_current = 1 
      AND c.sno IN (SELECT DISTINCT r.case_sno FROM recordroom) 
GROUP BY cp.case_sno
ORDER BY cp.case_sno ASC;

In second iteration we can rewrite the query using joins:

SELECT DISTINCT 
    cp.sno,cp.case_sno,c.case_no,c.cus_case_no,c.institued_date,
    c.ins_sno,cp.case_stage,c.emp_sno,c.objections,cp.wb_sno,cp.is_decided
FROM cases c
JOIN cases_proceedings cp ON c.sno = cp.case_sno 
JOIN recordroom r ON c.sno = r.case_sno
WHERE cp.is_decided = 1 AND cp.is_current = 1 
-- GROUP BY cp.case_sno /*redundant with DISTINCT*/
ORDER BY cp.case_sno ASC;

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=319248&siteId=1