SQL 存储过程优化总结
2013-03-22 10:41
246 查看
以下结果在平日优化时试验所得,可能会由于其他各种未描述到的条件导致结果不一致,仅供个人纪录及参考之用。
1)使用子查询效率比较低,如果是update的语句,使用function方法,可以节省很多时间
原句:
update TUC_NF set NF_6Month=round(isnull((select sum(Qty_Net_Fcst)/6 from EX_ITEM_DEMAND_FCST where item_no=TUC_NF.item_no and Whse=TUC_NF.whse and Fcst_Period between @NFDateF and @NFDateT),0),3)
优化:
update TUC_NF set NF_6Month=dbo.GetNF(TUC_NF.Item_NO,TUC_NF.WHSE,@NFDateF,@NFDateT)
经过循环3000条实验,此存储过程使用function的速度比使用子查询时间由原来的50分钟,降低到10s以内。但是是否适用于insert和其他情况,还有待测验。
2)删除表中数据
推荐使用 TRUNCATE table TUC_NF
不推荐使用 delete from TUC_NF
3)临时表使用时,如果使用insert into所有字段,不如先insert 一个字段,其余字段使用update快,前提是,其余字段是需要复杂计算得出,尤其当其余字段使用自查询时更明显。
后续有优化经验待补
1)使用子查询效率比较低,如果是update的语句,使用function方法,可以节省很多时间
原句:
update TUC_NF set NF_6Month=round(isnull((select sum(Qty_Net_Fcst)/6 from EX_ITEM_DEMAND_FCST where item_no=TUC_NF.item_no and Whse=TUC_NF.whse and Fcst_Period between @NFDateF and @NFDateT),0),3)
优化:
update TUC_NF set NF_6Month=dbo.GetNF(TUC_NF.Item_NO,TUC_NF.WHSE,@NFDateF,@NFDateT)
经过循环3000条实验,此存储过程使用function的速度比使用子查询时间由原来的50分钟,降低到10s以内。但是是否适用于insert和其他情况,还有待测验。
2)删除表中数据
推荐使用 TRUNCATE table TUC_NF
不推荐使用 delete from TUC_NF
3)临时表使用时,如果使用insert into所有字段,不如先insert 一个字段,其余字段使用update快,前提是,其余字段是需要复杂计算得出,尤其当其余字段使用自查询时更明显。
后续有优化经验待补
相关文章推荐
- SQL优化(索引、存储过程、数据分页的存储过程)
- SQL存储过程事务和优化方法
- SQL优化之存储过程强制编译
- 验证选择每日学习总结:DropDownList是否已选择验证、存储过程参数为sql字符串问题、将截断字符串或二进制数据。\r\n语句已终止
- 数据库开发必看 -- 用索引优化SQL,开发优秀的分页存储过程(二)
- sql存储过程总结
- SQL存储过程基本语法和实例(总结)
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- 数据库开发必看 -- 用索引优化SQL,开发优秀的分页存储过程(二)
- SQL在存储过程编写经验和优化措施
- sql 查询所有数据库、表名、表字段总结,判断表/视图/存储过程是否存在
- 针对sql 2005优化的高性能分页存储过程
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- SQL存储过程编写经验和优化措施
- 数据库开发必看 -- 用索引优化SQL,开发优秀的分页存储过程(一)
- SQL在存储过程设计心得体会和优化措施
- 存储过程与sql优化小结
- 数据库开发必看 -- 用索引优化SQL,开发优秀的分页存储过程(一)
- 以后这就当作总结的地方了 先写段SQL 存储过程回滚得吧