临时表与表变量的深入探究

来源:未知 责任编辑:责任编辑 发表时间:2015-09-17 09:42 点击:

临时表与表变量的深入探究
 
临时表或表变量我们一般用来充当中间结果集,很多时候都在用,但真正了解他们之间的区别的人还是很少的,网上流传的说法也不甚统一,所以今天我就做一个实验,让我们看看临时表和表变量的区别,以及他们各自的用途。
 
执行以下语句,对测试环境做准备
DBCC DROPCLEANBUFFERS  --从缓冲池中删除所有清除缓冲区
DBCC FREEPROCCACHE   --清除计划缓存
CHECKPOINT    --写入MDF中
 
1) 关于存储
表变量在内存中,是否真的不写磁盘,不会造成任何IO开销?
  www.2cto.com  
use tempdb  
exec sp_spaceused
 
--database_name    database_size    unallocated space
--tempdb        8.50 MB            6.75 MB
 
--tempdb数据库占用8.50M,未用空間6.75M
 
use TestDB
 
CREATE TABLE #Table3(id int,  AtypeId char(1024))
 
declare @count int = 50
INSERT INTO #Table3(id, atypeid)
SELECT TOP(@count) 1 as id, 'sss' FROM GraspFZDRPWrite001.dbo.BillType  --随便写的一张表,只是让其能循环插入50条记录
 
use tempdb
CHECKPOINT  --写入MDF中
 
exec sp_spaceused
 
--database_name    database_size    unallocated space
--tempdb        8.50 MB            6.62 MB
 
运行代码,我们发现,unallocated space 未用空间减小了,从6.75M减少至6.62M,说明临时表是占用了tempdb空间的,这点毋庸置疑。
   www.2cto.com  
我们接着看表变量又是如何?
 
use tempdb
exec sp_spaceused
 
--database_name    database_size    unallocated space
--tempdb        8.50 MB            6.69 MB
 
use TestDB
 
declare @Table3 table (id int,  atypeid char(1024))
declare @count int = 50
 
INSERT INTO @Table3(id, atypeid)
SELECT TOP(@count) 1 as id, 'sss' as atypeid
FROM GraspFZDRPWrite001.dbo.BillType 
 
use tempdb
checkpoint
 
exec sp_spaceused
--database_name    database_size    unallocated space
--tempdb        8.50 MB            6.62 MB
 
unallocated space值再次变小,说明此操作存在占用tempdb的数据库空间。两者其实都存储在tempdb中,都占用tempdb的数据库空间。
 
2)对表变量记录的操作是否占用更少的LOG
我们首先看临时表插入
 
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Request.ServerVariables 参数大全
  • 查看sql修改痕迹(SQL Change Tracking on Table)
  • 写给MongoDB开发者的50条建议Tip1
  • Percolator与分布式事务思考(二)
  • App数据层设计及云存储使用指南
  • PostgreSQL启动过程中的那些事三:加载GUC参数
  • SQL Server、Oracle、db2所提供的简装版(Express)比较
  • PostgreSQL 安装问题
  • 【自主研发-贡献给SQL Server人员】索引诊断与优化软件使用说明
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1