加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server性能调优杂记(一)----傻瓜机的失效效应

发布时间:2016-01-17 12:39:34 所属栏目:MsSql教程 来源:网络整理
导读:最近,下面的一个项目遇到紧急问题,我这匹老马也要和年轻人一起奋斗一下。问题是当把一倍压力 数据灌入数据库,很多查询都奇慢无比。 说道这里必须要说一下性
最近,下面的一个项目遇到紧急问题,我这匹老马也要和年轻人一起奋斗一下。问题是当把一倍压力 数据灌入数据库,很多查询都奇慢无比。

说道这里必须要说一下性能问题的基本准则。性能问题 Tunning的次序

1)架构设计(软件架构和数据库设计,糟糕的设计几乎是致命的)

2)代码缺 陷(导致性能问题的90%)

3)增加索引(这个是要根据实际情况来确定)

4)资源调优(CPU- >内存->Disk IO)

这里网络不是考虑因素。

把程序的SQL文拿出来一看,有的一看一 堆子查询构成的JOIN,基本上一眼就可以断定,需要重写。我们这个运用系统把SQL文都配置成动态的, 这个设计给现在的调优带来了方便。

突然出现了一个很有趣的现象。有一个查询很慢(一分钟才 出来),检查SQL文。这句SQL文是这样

SELECT ISNULL(a.CWB_NO,b.CWB_NO) AS CWB_NO,a.IMPORT_AWB_NO,
a.IMPORT_BWB_NO,ISNULL(a.PCS,0) AS RS2PCS,ISNULL(b.PCS,0) AS DECPCS,a.CCC_STATUS
FROM 
(SELECT * FROM  TB_CWB WHERE IMPORT_AWB_NO = @IMPORT_AWB_NO) a
FULL JOIN 
(SELECT * FROM  TP_DECSUMMARY WHERE AWB_NO = @IMPORT_AWB_NO) b
ON  a.CWB_NO = b.CWB_NO AND  b.AVAILABLE = 'Y'
WHERE  a.AVAILABLE = 'Y'

FULL JOIN不是问题核心(因为业务规则就是这样),也不是 SELECT *,其实SELECT *和指定字段或许有差异,但是绝对不会有很大差别。

我在后台运行了一 下,0秒都不到。但是另外一个程序员说同样运行要59秒。奇怪!!!

拿过来对比一下,就发现差 异了。

因为,我们的系统采取的是用.NET中cmd指定参数的写法,转换成后台sql文,等于运行 sp_executesql的方法。更简单说就是替换变量。

即等价的SQL文应该是

SELECT ISNULL(a.CWB_NO,b.CWB_NO) AS CWB_NO,a.IMPORT_AWB_NO,
a.IMPORT_BWB_NO,ISNULL(a.PCS,0) AS RS2PCS,ISNULL(b.PCS,0) AS DECPCS,a.CCC_STATUS
FROM 
(SELECT * FROM  TB_CWB WHERE  IMPORT_AWB_NO = '25200000011') a
FULL JOIN 
(SELECT * FROM  TP_DECSUMMARY WHERE AWB_NO ='25200000011') b
ON  a.CWB_NO = b.CWB_NO AND  b.AVAILABLE = 'Y'
WHERE a.AVAILABLE = 'Y'

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读