首页 / MSSQL / MSSQL效率优化随记
MSSQL效率优化随记
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MSSQL效率优化随记,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2044字,纯文字阅读大概需要3分钟。
内容图文
![MSSQL效率优化随记](/upload/InfoBanner/zyjiaocheng/1204/1bf13363a9574637b301e5c8ff77d897.jpg)
1.尽量不要在where中进行计算,尤其是需要遍历的情况
原来代码,执行大约40秒
INSERT INTO @TransferCode ( PROXY_NO, TING_NO, WTotal, BTotal ) SELECT H.PROXY_NO, H.TING_NO, SUM(CASEWHEN H.CARDTYPE=‘W‘THENCASEWHEN (B.DDATE=‘‘AND B.DTIME=‘‘) THEN0WHEN B.BCHIPEX=‘10‘THEN-B.BCHIP ELSE B.BCHIP ENDELSE0END), SUM(CASEWHEN H.CARDTYPE=‘B‘THENCASEWHEN (B.DDATE=‘‘AND B.DTIME=‘‘) THEN0WHEN B.BCHIPEX=‘10‘THEN-B.BCHIP ELSE B.BCHIP ENDELSE0END) FROM dbo.CM_ROCARDB AS B LEFTJOIN dbo.CM_ROCARDH AS H ON B.BARCODE = H.BARCODE LEFTJOIN dbo.CM_PROXY AS P ON P.PROXY_NO=H.PROXY_NO WHERE (@TingNo=‘‘OR H.TING_NO=@TingNo) AND (@ProxyNo=‘‘OR (H.PROXY_NO LIKE@ProxyNo+‘%‘OR P.PROXY_NAME LIKE@ProxyNo+‘%‘)) AND (@HuKou=‘‘OR (EXISTS(SELECT1FROM dbo.CM_PROXY WHERE HUKOU_NO=@HuKouAND PROXY_NO=H.PROXY_NO))) AND dbo.GetTransCodeEndYM(B.BARCODE, B.BodyNo)=@YearMonthGROUPBY H.PROXY_NO, H.TING_NO ORDERBY H.PROXY_NO, H.TING_NO
主要是费时的在dbo.GetTransCodeEndYM(B.BARCODE, B.BodyNo)=@YearMonth函数这段,其中B.BARCODE,
B.BodyNo为
Primary Key
优化的代码,执行大约1秒
INSERT INTO @TransferCode ( PROXY_NO, TING_NO, WTotal, BTotal ) SELECT PROXY_NO, TING_NO, SUM(CASEWHEN CARDTYPE=‘W‘THENCASEWHEN (DDATE=‘‘AND DTIME=‘‘) THEN0WHEN BCHIPEX=‘10‘THEN-BCHIP ELSE BCHIP ENDELSE0END), SUM(CASEWHEN CARDTYPE=‘B‘THENCASEWHEN (DDATE=‘‘AND DTIME=‘‘) THEN0WHEN BCHIPEX=‘10‘THEN-BCHIP ELSE BCHIP ENDELSE0END) FROM ( SELECT H.PROXY_NO, H.TING_NO, H.CARDTYPE, B.DDATE, B.DTIME, B.BCHIPEX, B.BCHIP, dbo.GetTransCodeEndYM(B.BARCODE, B.BodyNo) AS YearMonth FROM dbo.CM_ROCARDB AS B LEFTJOIN dbo.CM_ROCARDH AS H ON B.BARCODE = H.BARCODE LEFTJOIN dbo.CM_PROXY AS P ON P.PROXY_NO=H.PROXY_NO WHERE (@TingNo=‘‘OR H.TING_NO=@TingNo) AND (@ProxyNo=‘‘OR (H.PROXY_NO LIKE@ProxyNo+‘%‘OR P.PROXY_NAME LIKE@ProxyNo+‘%‘)) AND (@HuKou=‘‘OR (EXISTS(SELECT1FROM dbo.CM_PROXY WHERE HUKOU_NO=@HuKouAND PROXY_NO=H.PROXY_NO))) ) AS A WHERE YearMonth=@YearMonthGROUPBY PROXY_NO, TING_NO ORDERBY PROXY_NO, TING_NO
将步骤调整为先执行过滤数据,函数计算放在select中,这样将过滤数据后再进行计算,然后再通过过滤年月查询
注:测试时只查询一个proxyno,为空时估计更明显
原文:http://www.cnblogs.com/ywkpl/p/3571357.html
内容总结
以上是互联网集市为您收集整理的MSSQL效率优化随记全部内容,希望文章能够帮你解决MSSQL效率优化随记所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。