本篇内容介绍了“MySQL中NOT EXISTS优化案例教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
 
一、原始语句:
 
SELECT * FROM dcf_account.t_posting_transaction t1 WHERE NOT EXISTS ( SELECT * FROM dcf_loan.t_account_posting_detail t2 WHERE t1.track_no = t2.posting_num
     );
二、关于优化改语句的几点思考:
    对于原始语句,因为是NOT EXISTS判断,所以子查询中没有必要SELECT ,只需SELECT ID甚至是SELECT 1都可以。另外,鉴于MySQL子查询算法性能较差,考虑改写成对应的JOIN方式,因为这里是NOT EXIST判断,所以改写时有一定技巧,即可使用左连接,然后过滤出未能成功连接的记录。还有,原始语句最外层的查询也是SELECT 至于这个是否有必要应当依据具体业务,尽量在满足业务要求的条件下取尽可能少的字段。最后,即时做了上述优化,若在连接条件上没有合适的索引SQL性能仍然会非常差(特别是在表的数据量巨大的时候),所以考虑在连接的条件列t1.track_no 和 t2.posting_num上分别创建索引。
 
三、最终的优化结果如下 :
    语句由原来的进一个小时的运行时间减少到1秒内。
 
SELECT t1.id FROM dcf_account.t_posting_transaction t1 LEFT JOIN dcf_loan.t_account_posting_detail t2 ON t1.track_no = t2.posting_num WHERE t2.id IS NULL;
“MySQL中NOT EXISTS优化案例教程”的内容就介绍到这里了,感谢大家的阅读。 

dawei

【声明】:舟山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。