日期:2014-05-17  浏览次数:20564 次

减少使用临时表
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 临时表?

------解决方案--------------------
全局临时表存在并发问题,不通用。用临时表没问题啊。百万级数据量也建议用临时表,可以创建索引
------解决方案--------------------