加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2005 – SQL Server,带截断的临时表和带删除的表变量

发布时间:2020-12-12 16:23:23 所属栏目:MsSql教程 来源:网络整理
导读:我有一个存储过程,我在其中创建一个临时表,通常包含1到10行.在存储过程中,此表被截断并填充多次.它被截断,因为它比删除更快. 当我因使用删除而遭受惩罚时(截断对表变量不起作用),我是否通过用表变量替换此临时表来获得性能提升? 虽然表变量主要在内存中,并且
我有一个存储过程,我在其中创建一个临时表,通常包含1到10行.在存储过程中,此表被截断并填充多次.它被截断,因为它比删除更快.
当我因使用删除而遭受惩罚时(截断对表变量不起作用),我是否通过用表变量替换此临时表来获得性能提升?

虽然表变量主要在内存中,并且通常比临时表更快,但是我必须通过删除而不是截断来获得任何好处吗?

解决方法

对脚本运行followign,似乎表变量是更好的选择
CREATE TABLE #Temp(
        ID INT
)

DECLARE @Int INT,@InnerInt INT
SELECT  @Int = 1,@InnerInt = 1

WHILE @Int < 50000
BEGIN
    WHILE @InnerInt < 10
    BEGIN
        INSERT INTO #Temp SELECT @InnerInt
        SET @InnerInt = @InnerInt + 1
    END
    SELECT @Int = @Int + 1,@InnerInt = 1
    TRUNCATE TABLE #Temp
END

DROP TABLE #TEMP

GO

DECLARE @Temp TABLE(
        ID INT
)

DECLARE @Int INT,@InnerInt = 1

WHILE @Int < 50000
BEGIN
    WHILE @InnerInt < 10
    BEGIN
        INSERT INTO @Temp SELECT @InnerInt
        SET @InnerInt = @InnerInt + 1
    END
    SELECT @Int = @Int + 1,@InnerInt = 1
    DELETE FROM @Temp
END

来自Sql Profiler

CPU     Reads   Writes  Duration
36375     2799937   0       39319

vs

CPU     Reads   Writes  Duration
14750   1700031 2       17376

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读