易截截图软件、单文件、免安装、纯绿色、仅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 DATEPART函数使用

sql DATEPART函数使用(摘抄)
sql DATEPART函数使用
DATEPART
返回代表指定日期的指定日期部分的整数。
语法
DATEPART ( datepart ,date )
参数
datepart
是指定应返回的日期部分的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。
日期部分缩写
year
yy, yyyy
quarter
qq, q
mont ......

sql实现IP的整数与字符串转化

数据库操作:利用函数减少存储空间(以时间换取空间)
例如一个表有IP列,在存储的时候我们为了减少存储空间,可以将它转化为整数,存储在数据库,但是在从数据库里查询并显示给大家看的时候,可能你是看不明白整数具体是什么。这样为了利于大家阅读分析数据,可以在查询的时候利用函数将整数IP转为为字符串
例如:
&nbs ......

预防SQL注入攻击之我见

1、 SQL注入攻击的本质:让客户端传递过去的字符串变成SQL语句,而且能够被执行。
2、 每个程序员都必须肩负起防止SQL注入攻击的责任。
  说起防止SQL注入攻击,感觉很郁闷,这么多年了大家一直在讨论,也一直在争论,可是到了现在似乎还是没有定论。当不知道注入原理的时候会觉得很神奇,怎么就被注入了呢? ......

SQL语句效率

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