Case: Rewriting SQL and Deleting Subqueries (2)
Symptom
On a site, the customer gave the feedback saying that the execution time of the following SQL statements lasted over one day and did not end:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
UPDATE calc_empfyc_c_cusr1 t1 SET ln_rec_count = ( SELECT CASE WHEN current_date - ln_process_date + 1 <= 12 THEN 0 ELSE t2.ln_rec_count END FROM calc_empfyc_c1_policysend_tmp t2 WHERE t1.ln_branch = t2.ln_branch AND t1.ls_policyno_cusr1 = t2.ls_policyno_cusr1 ) WHERE dsign = '1' AND flag = '1' AND EXISTS (SELECT 1 FROM calc_empfyc_c1_policysend_tmp t2 WHERE t1.ln_branch = t2.ln_branch AND t1.ls_policyno_cusr1 = t2.ls_policyno_cusr1 ); |
The corresponding execution plan is as follows:
Optimization
SubPlan exists in the execution plan, and the calculation accounts for a large proportion in the SubPlan query. That is, SubPlan is a performance bottleneck.
Based on the SQL syntax, you can rewrite the SQL statements and delete SubPlan as follows:
1 2 3 4 5 6 |
UPDATE calc_empfyc_c_cusr1 t1 SET ln_rec_count = CASE WHEN current_date - ln_process_date + 1 <= 12 THEN 0 ELSE t2.ln_rec_count END FROM calc_empfyc_c1_policysend_tmp t2 WHERE t1.dsign = '1' AND t1.flag = '1' AND t1.ln_branch = t2.ln_branch AND t1.ls_policyno_cusr1 = t2.ls_policyno_cusr1; |
After the rewriting, the execution of this SQL statement is complete within 50s.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot