首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

减小使用临时表

2013-08-16 
减少使用临时表1、数据量都在百万级以上的两个表做连接查询,这个结果在后面的存储过程中要多次使用。除了使

减少使用临时表
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可以巧妙的使用分页的方式,来进行数据的动态转换。 
[解决办法]
需要多次使用,是最好用临时表。临时表的优点是没有锁定,没有日志开销。

热点排行