На первой итерации внутренний запрос можно оптимизировать, удалив сортировку и группировку:
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;
На второй итерации мы можем переписать запрос с помощью объединений:
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;