易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL SERVER中临时表、持久表、表变量的区别

 与持久表一样,优化器创建并维护临时表的分布统计信息,并跟踪它的基数。当索引临时表时,这种能力尤其重要。当优化器需要评估选择性时,它就可以根据这些分布统计信息生成经过优化的计划。这是临时表在性能方面不同于表变量的主要特性之一。
此外,因为临时表会维护统计信息,如果上次编译后被引用表有足够多的行发生变化(即达到重新编译阀值)代码会被重新编译。重新编译。重新编译阀值是根据表类型和行数计算得出的。
对于持久表来说,如果n<=500,则RT=500(n=当编译查询计划时表的基数);如果n>500,则RT=500+0.20*n。
对于临时表,如果n<6,则RT=6;如果6<=n<=500,则RT=500;如果n>500,则RT=500+0.20*n。例如,向临时表中加载6行后,再增加第7行将导致重新编译,而持久表很晚才会出现第一次重新编译。如果你想在查询临时表使用KEEP PLAN查询提示即可。
优化器维护临时表的分布统计信息这一特点及上述结论是选择临时对象类型的最重要特征。当从临时表和表变量中做出选择时,这些因素尤为重要,优化器不会为表变量创建或维护分布统计信息。虽然也为表变量维护行计数信息,但这个信息通常不准确。表变量自己不会引起重新编译,而重新编译对于更新行计数来说是必须的。在SQL SERVER 2005中,可以使用RECOMPILE查询提示以强制重新编译包含表变量的查询。总之,表变量不发生作用于优化的重新编译。
我们必须问自己两个问题:
1.优化器需要分布统计信息或精确基数评估来生成高效的执行计划吗?如果需要,当统计信息无效时,使用低效计划的成本是什么?
2.使用临时表时重新编译的成本是什么?
有时优化器不需要统计信息就可以计算出最佳计划。例如,从表中返回所有行的查询,在定义了唯一索引的列上执行的点查询,利用聚集索引或覆盖索引的范围查询等。在这些情况下,不论表的大小,都不会用到统计信息,只会产生重新编译的开销。这时,可以考虑使用表变量。
此外,当表非常小时,可选的方法有:
1)使用表变量,执行完全扫描,几乎或根本没有重新编译;
2)使用临时表,执行index seek,产生更多的重新编译。由于重新编译的缺点,seek的优势也许比不上scan.这种情况也应该考虑使用表变量。
另一方面,如果优化器的确需要统计信息可以生成高效的执行计划,而且你使用的又不是小表,那么使用低效计划的成本可能比重新编译的成本要高得多。这时应该考虑使用临时表。


相关文档:

航空公司管理系统(VC++ 与SQL 2005)

系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
      这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......

SQL函数大全

 
一、内部函数
1、内部合计函数
1)COUNT(*) 返回行数
2)COUNT(DISTINCT COLNAME)返回指定列中唯一值的个数
3)SUM(COLNAME/EXPRESSION)返回指定列或表达式的数值和;
4)SUM(DISTINCT COLNAME) 返回指定列中唯一值的和
5)AVG(COLNAME/EXPRESSION)返回指定列或表达式中的数值平均值
6)AV ......

创建SQL 有误?错在哪呢?

 
USE master
GO
CREATE DATABASE testbase2
ON
PRIMARY
(NAME = prim_sub_dat1,
FILENAME = 'G:\SQL SERVER2000\prim_sub_dat.mdf',
SIZE = 5MB,
MAXSIZE = 50MB,
FILEGROWTH = 20%),
(NAME = prim_sub_dat2,
FILENAME = 'G:\SQL SERVER2000\prim_sub_dat.ndf'
SIZE = 5MB,
MAXSIZE = 50MB,
......

SQL CASE 语句

 Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
         WHEN '1' THEN '男'
         WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
    ......

SQL语句效率

 1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。
调整不良SQL通常可以从以下几点切入:
检查不良的SQL,考虑其写法是否还有可优化内容
检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写
检查优化 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号