1.尽量不要在where中进行计算,尤其是需要遍历的情况
原来代码,执行大约40秒

INSERT INTO @TransferCode ( PROXY_NO, TING_NO, WTotal, BTotal )
SELECT H.PROXY_NO, H.TING_NO,
SUM(CASE WHEN H.CARDTYPE='W' THEN CASE WHEN (B.DDATE='' AND B.DTIME='') THEN 0 WHEN B.BCHIPEX='' THEN -B.BCHIP ELSE B.BCHIP END ELSE 0 END),
SUM(CASE WHEN H.CARDTYPE='B' THEN CASE WHEN (B.DDATE='' AND B.DTIME='') THEN 0 WHEN B.BCHIPEX='' THEN -B.BCHIP ELSE B.BCHIP END ELSE 0 END)
FROM dbo.CM_ROCARDB AS B
LEFT JOIN dbo.CM_ROCARDH AS H ON B.BARCODE = H.BARCODE
LEFT JOIN 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(SELECT 1 FROM dbo.CM_PROXY WHERE HUKOU_NO=@HuKou AND PROXY_NO=H.PROXY_NO)))
AND dbo.GetTransCodeEndYM(B.BARCODE, B.BodyNo)=@YearMonth
GROUP BY H.PROXY_NO, H.TING_NO
ORDER BY 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(CASE WHEN CARDTYPE='W' THEN CASE WHEN (DDATE='' AND DTIME='') THEN 0 WHEN BCHIPEX='' THEN -BCHIP ELSE BCHIP END ELSE 0 END),
SUM(CASE WHEN CARDTYPE='B' THEN CASE WHEN (DDATE='' AND DTIME='') THEN 0 WHEN BCHIPEX='' THEN -BCHIP ELSE BCHIP END ELSE 0 END)
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
LEFT JOIN dbo.CM_ROCARDH AS H ON B.BARCODE = H.BARCODE
LEFT JOIN 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(SELECT 1 FROM dbo.CM_PROXY WHERE HUKOU_NO=@HuKou AND PROXY_NO=H.PROXY_NO)))
) AS A
WHERE YearMonth=@YearMonth
GROUP BY PROXY_NO, TING_NO
ORDER BY PROXY_NO, TING_NO

将步骤调整为先执行过滤数据,函数计算放在select中,这样将过滤数据后再进行计算,然后再通过过滤年月查询
注:测试时只查询一个proxyno,为空时估计更明显

MSSQL效率优化随记的更多相关文章

  1. 开发效率优化之Git分布式版本控制系统(一)

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从Git分布式版本控制系统来阐述开发效率优化 一,企业 ...

  2. php程序效率优化的一些策略小结

    php程序效率优化的一些策略小结   1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他 ...

  3. jquery选择器效率优化问题

    jquery选择器效率优化问题   jquery选择器固然强大,但是使用不当回导致效率问题: 1.要养成将jQuery对象缓存进变量的习惯 //不好的写法 $('#btn').bind("c ...

  4. php性能效率优化

    [size=5][color=Red]php性能效率优化[/color][/size] 最近在公司一边自学一边写PHP程序,由于公司对程序的运行效率要求很高,而自己又是个新手,一开始就注意程序的效率很 ...

  5. Jenkins Kubernetes Slave 调度效率优化小记

    Jenkins K8S Slave 调度效率优化 by yue994488@126.com 使用kubernetes为测试工具Gatling进行大规模压测,压测期间发现Jenkins调度压测实例较慢, ...

  6. 见招拆招-PostgreSQL中文全文索引效率优化

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  7. C#效率优化(1)-- 使用泛型时避免装箱

    本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家 ...

  8. Unity3d代码及效率优化总结

    1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU. 2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unli ...

  9. 关于多层for循环迭代的效率优化问题

    关于多层for循环迭代的效率优化问题 今天笔试的时候遇到这么一道题目  说有上面这么循环嵌套  .问怎么优化 并说明原因.     for(int i = 0 ; i < 1000 ;i++){ ...

随机推荐

  1. Oracle 排序分析函数之ROW_NUMBER、RANK和DENSE_RANK

    我们都知道分析函数功能很强大,可能需要写很复杂的标准SQL才能办到或不可能办到的事,使用分析函数却能很容易完成.我们经常会用到排序分析函数,如ROW_NUMBER,RANK,DENSE_RANK.这三 ...

  2. TypeScript学习指南第一章--基础数据类型(Basic Types)

    基础数据类型(Basic Types) 为了搭建应用程序,我们需要使用一些基础数据类型比如:numbers,strings,structures,boolean等等. 在TypeScript中除了Ja ...

  3. iOS 后台运行实现 --备用

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...

  4. 百度:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序

    一.题目理解 题目:数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序.要求空间复杂度为O ...

  5. POJ 2186 Popular Cows(Tarjan)

    http://poj.org/problem?id=2186 题意 :给你n头牛,m对关系,每对关系由两个编号组成,u和v代表着u认为v是受欢迎的,如果1认为2是受欢迎的,2认为3是受欢迎的,那1认为 ...

  6. 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】

    下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...

  7. I2S和PCM

    http://blog.csdn.net/azloong/article/details/6536855

  8. 交叉编译 小米路由器mini 的 python(MIPS)

    看了很多文章,要么说的是用opkg安装python,要么说的是小米路由器的交叉编译,就是没有mini的.学习了这篇文章(http://me.deepgully.com/post/56389167868 ...

  9. VC 无标题栏对话框移动(在OnLButtonDown里再次发送消息)

    操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:实现无框移动 所谓的无标题栏对话框,是基于对话框的工程,对话框属性Border设置为None,对话框如下所示: 为 ...

  10. leetcode面试准备:Sliding Window Maximum

    leetcode面试准备:Sliding Window Maximum 1 题目 Given an array nums, there is a sliding window of size k wh ...