SqlServer临时表的应用

1.1.1. 简介

临时表是建立在系统临时文件夹中的表,如果使用得当,完全可以像普通表一样进行各种操作,SqlServer的临时表存储在tempdb中,当不再使用时会自动删除。

定义临时表可采用如下两种方式。

第一:声明变量的方式,例如:

DECLARE @T1 table(ProjectNo int,xl_Pipe nvarchar(200));

第二:直接插入的方式,例如:

select tableSum.o_projectno,tableSum.o_projectname,

cast((case when (tableA.Resul is null)then 0.00 else tableA.Resul end)as decimal(18,2))

into #temp1

from

(

    select o_projectno,o_projectname from CDMS_Project

where o_parentno <> 0 and o_type='P'

) as tableSum

我们可以通过以上两种方式构建临时表。但是在采用第二种方式时,对不再使用的临时表需要删除掉,使用drop语句进行删除。例如:

drop table #temp1

1.1.2. 应用场景

临时表主要应用于sql查询语句,使用它能优化性能。在工程项目管理系统中,需要对大量的数据进行汇总、分类、求和等方式的处理,并生成各类报表或图表。采用传统的表连接进行查询,一般一个sql查询语句就会耗时30多秒,因此我们需要对sql查询做性能优化,在此我们可以使用临时表。另外,在以下场景中,我们也可以使用临时表。

(1).   当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。

(2).   程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的。

1.1.3. 应用示例

在项目的开发过程中,往往会遇到sql语句查询效率过低的问题,这时我们可以采用临时表进行优化。在工程项目管理系统中,大部分的报表及指标数据的查询都使用了临时表,下面以工程范围信息汇总表的SQL语句作为案例,阐述在具体问题上临时表的应用。 关键步骤如下:(完整的sql语句可见工程项目管理系统源代码中的sql语句)

   声明临时表

DECLARE @T2 table(ProjectNo int,xl_Pressure nvarchar(200)); -- 压力

   给临时表赋值     

insert into @T2 (ProjectNo,xl_Pressure)  

select a.ProjectNo,b.xl_Pressure from

(SELECT o_parentno as ProjectNo,o_projectno as TenderID FROM CDMS_Project

where o_type = 'TS') as a

    临时表的应用

select * from

(

SELECT B.ProjectNo,LEFT(UserList,LEN(UserList)-1) as xl_Pressure

FROM

(

   SELECT ProjectNo, (SELECT xl_Pressure+'\' FROM @T2 WHERE ProjectNo=A.ProjectNo FOR XML PATH('')) AS UserList

   FROM @T2 A GROUP BY projectno

 )  B

) as h on h.ProjectNo = A.o_projectno

1.1.4. 取得的成果

通过使用临时表,使sql查询执行时间都从原来的13秒、9秒减少到3秒和5秒,性能得到了提高,而内存消耗有了小幅度的提高,但并不影响系统的性能。使用临时表使SQL语句整体结构性增强,增强SQL语句的可读性。

1.1.5. 存在问题及改进

在应用临时表是应该充分考虑对内存的消耗,以便对系统的性能不会造成影响。

转载于:https://www.cnblogs.com/gjtlovecwx/archive/2011/05/03/2035109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值