读书人

减小使用临时表

发布时间: 2013-08-16 14:29:57 作者: rapoo

减少使用临时表
1、数据量都在百万级以上的两个表做连接查询,这个结果在后面的存储过程中要多次使用。除了使用临时表将其结果保存,还有没有什么办法可以减少使用临时表。

2、在做动态的行转列的时候(行不固定)用到全局变量临时表,有没有其它办法可以减少使用临时表。

IF OBJECT_ID('tempdb..##dual1') IS NOT NULL 
DROP TABLE ##dual1
IF OBJECT_ID('tempdb..#temp1') IS NOT NULL
DROP TABLE #temp1
DECLARE @sql2 VARCHAR(8000) ,
@sql3 VARCHAR(8000)
SELECT id = IDENTITY( INT,0,1 ),
groupid = 0 ,
值 = ',max(case Fmsize when ''' + fmsize
+ ''' then Flnums else 0 end ) [' + Fmsize + ']'
INTO #temp1
FROM ( SELECT DISTINCT
Fmsize
FROM TEST
) AS a
UPDATE #temp1
SET groupid = id / 80
--判断将前80条记录的值赋给变量0
SELECT @sql2 = '' ,
@sql3 = ''
SELECT @sql2 = @sql2 + 值
FROM #temp1
WHERE groupid = 0
--第一个变量
SELECT @sql3 = @sql3 + 值
FROM #temp1
WHERE groupid = 1
EXEC('select * into ##dual1 from (select styleid,colorid'
+@sql2+@sql3 +' from TEST group by styleid,colorid)a')
DROP TABLE #temp1

如上面的例子中用到全局临时表##DUAL1和#TEMP1。有没有办法不使用这些临时表。 这边查询出的数据都需要在下面的存储过程中使用到。 SQL 临时表?
[解决办法]
全局临时表存在并发问题,不通用。用临时表没问题啊。百万级数据量也建议用临时表,可以创建索引
------解决方案--------------------


用临时表没什么不好的,如果仍有性能问题,可考虑在临时表上建索引..
[解决办法]
1、除了使用临时表将其结果保存,还有没有什么办法可以减少使用临时表

这个得看lz的具体使用情况,如果查询时间间隔较长,可以使用实际的表(视图)来代替。 反之,如果是较短,查询分析器也会尽量使用内存里的数据的。

2、动态行列转换,百万级的数据,效率不会太理想的。如果可以,lz可以巧妙的使用分页的方式,来进行数据的动态转换。
[解决办法]
需要多次使用,是最好用临时表。临时表的优点是没有锁定,没有日志开销。

读书人网 >SQL Server

热点推荐