SQL Server性能调优杂记(二)----傻瓜机的失效效应续
2008-12-08 10:15:20 来源:WEB开发网上文说道了失效效应。只想说明在Performance Tunning方面只能根据情况来寻求原因并解决。这是一个有意思的过程。大原则是经验,帮助我们少犯错误。因此,糟糕的设计,必然导致性能问题。没有经验的程序员必然会写出糟糕的代码。但是良好的设计可以弥补程序员的经验不足。这个到此打住,这个topic涉及品质管理,实在太大了。
再看一例,失效效应的体现。
还是上文数说道了2种SQL文写法产生的执行计划。我选用一台双核的PC,相当于2个单核CPU。
有一个大表TB_CWB。记录约30-40万。(在生产环境下属于小数据量,在我的测试中可以看成大表)。表上已经对fn_Clt_Datetime 做了索引。
1.SQL文一
select CWB_No,fn_Clt_Datetime,acctId_guid,fn_OrigZone_Id,DestSZMCode,DestZone_Id,CWBType,fn_Clt_Datetime,fn_cwbtype,
PayType,Payweight,StdPriceweight,StdFreight,IsCalculated,AFterDsctFreight,
SchgFreight,InvcFreight,Salesamount,SchgDetail,SchgFreight_Remarks
from OCS_TB_CWB
WHERE
fn_Clt_Datetime between '2008-9-1' and '2008-9-16'
运行结果,发现奇慢无比。需要12秒才能出结果。
检查执行计划,发现用了聚集索引扫描(主键),就是相当于选择了全表扫描的计划。因为CBO认为这句SQL比动用索引还要快。见下图
2 SQL文二
存储过程写法
declare @date_from datetime
declare @date_to datetime
set @date_from='2008-9-1'
set @date_to='2008-9-16'
select CWB_No,fn_Clt_Datetime,acctId_guid,fn_OrigZone_Id,DestSZMCode,DestZone_Id,CWBType,fn_Clt_Datetime,fn_cwbtype,
PayType,Payweight,StdPriceweight,StdFreight,IsCalculated,AFterDsctFreight,
SchgFreight,InvcFreight,Salesamount,SchgDetail,SchgFreight_Remarks
from OCS_TB_CWB
WHERE
fn_Clt_Datetime between @date_from and @date_to
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接