SQL SERVER学习笔记:临时表与表变量
2014-06-24 22:25
232 查看
本文主要摘自徐海蔚的《Microsoft SQL SERVER企业级平台管理实践》
表变量可以作为存储过程的返回参数,而临时表不行。(存疑?表值参数只在SQL SERVER2008才开始支持,并且限制很多,要首先定义表类型)
临时表跟普通的表一样,SQL SERVER会维护其统计信息,以得到合适的执行计划;也可以在上面建立索引。而表变量既不能建索引,也不会有统计信息;SQL SERVER在做执行计划的时候,总是认为表变量里的数据量只有很少的几行。
因此,表变量的好处是维护成本很低,大量并发使用时系统开销要比临时表低。但因为缺乏统计信息,只适合存放少量数据
而临时表功能和普通表接近,能够为大数据量做优化;缺点是维护成本比较高,大量并发使用时,系统负荷比较大。
表变量可以作为存储过程的返回参数,而临时表不行。(存疑?表值参数只在SQL SERVER2008才开始支持,并且限制很多,要首先定义表类型)
use [test] go create type [user] as table(id int,name varchar(50)); go create procedure test_prd @u [user] readonly as begin select * from @u; end go declare @u [user]; insert into @u(id,name) values(1,'zhang3'); exec test_prd @u; go drop procedure test_prd; go drop type [user]; go
临时表跟普通的表一样,SQL SERVER会维护其统计信息,以得到合适的执行计划;也可以在上面建立索引。而表变量既不能建索引,也不会有统计信息;SQL SERVER在做执行计划的时候,总是认为表变量里的数据量只有很少的几行。
因此,表变量的好处是维护成本很低,大量并发使用时系统开销要比临时表低。但因为缺乏统计信息,只适合存放少量数据
而临时表功能和普通表接近,能够为大数据量做优化;缺点是维护成本比较高,大量并发使用时,系统负荷比较大。
use [test] go select 1 as id,'li4' as name into #t; go declare @t table(id int,name varchar(50)); insert into @t(id,name) values(2,'wang8'); go create procedure test_prd as begin exec('select * from #t;select * from @t;'); end go exec test_prd; go drop procedure test_prd; go drop table #t; go
相关文章推荐
- SQL SERVER学习笔记:临时表与表变量
- 关于SQLServer2005的学习笔记——临时表、表变量和CTE
- 【个人学习笔记12之--临时表和表变量】
- 【T-MAC学习笔记之12--临时表和表变量】
- 关于SQLServer2005的学习笔记——临时表、表变量和CTE
- Sql server 学习笔记---全局变量
- SQL Server 2005 学习笔记--SSIS篇(2)
- SQL SERVER 2000学习笔记一
- debian学习笔记--profile文件相接(环境变量讲解)
- Java学习笔记之Final(Static)变量
- SQL Server 2005学习笔记--报表(1)
- SQL Server 2005 学习笔记--SSIS篇(1)
- DB2 学习笔记宿主变量、游标、 Drop、Create、Alter、锁、性能维护。
- Javascript学习笔记(二)Javascript核心之变量
- SQL SERVER 学习笔记(1)
- SQL Server 2005 学习笔记--SSIS篇(3架构)
- php学习笔记3—(变量、常量和操作符)
- sql server 2005 排序规则与大小写敏感 (sql server2005学习笔记1)
- java基础学习笔记原始类型变量赋值与非原始变量赋值
- SQL Server 2000 学习笔记(一)