English

速达软件
     
当前位置:速达软件 >> 技术支持 >> 浏览文章

四大方面讲述SQL2005与SQL2000的改动

发布日期:2009年08月07日 浏览次数: 作者:佚名  

本文从数据库设计、开发、DBA管理等四个方面叙述了SQL2005与SQL2000两个版本间的改动。

一、数据库设计方面

1、字段类型。

varchar(max)\nvarchar(max)类型的引入大大的进步了编程的服从,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。但是这就引发了对varchar和char服从讨论的老题目。到底如何分配varchar的数据,是否会出现大规模的碎片?是否碎片会引发服从题目?这都是必要进一步探究的东西。

varbinary(max)代替image也让SQL Server的字段类型更加简洁同一。

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是小我对其没好感。(CSDN的开发者应该是相称的熟了!)

2、外键的级联更能扩展。

可能大部分的偕行在设计OLTP体系的时候都不乐意建立外键,都是通过程序来控制父子数据的完备性。但是再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SET NULL 和 SET DEFAULT 属性,能够提供能好的级联设置。

3、索引附加字段。

这是一个不错的新特征。虽然索引的附加字段没有索引键值服从高,但是相对映射到数据表中服从照旧进步了许多。我做过试验,在我的实验环境中会比映射到表中进步30%左右的服从。

4、计算字段的持久化。

原来的计算字段其实和假造字段很像。只是管理方面好了而已,性能方面进步不多。但是SQL2005提供了计算字段的持久化,这就进步了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

5、分区表。

分区表是个亮点!从分区表也能看出微软要做大作强SQL Server的信念。资料许多,这里不细致说。但是重点了解的是:如今的SQL Server2005的表,都是默认为分区表的。由于它要支撑滑动窗口的这个特征。这种特征对历史数据和实时数据的处理是很有帮助的。

但是必要细致的一点,也是我使用过程中发现的一个题目。在建立function->schema->table后,假如在现有的分区表上建立没有显式声明的聚集索引时,分区表会主动变为非分区表。这一点很让我纳闷。假如你觉得我的非分区索引无法对起子分区。

分区表服从题目一定是大家关心的题目。在我的试验中,假如按照分区字段进行的查询(过滤)服从会高于未分区表的雷同语句。但是假如按照非分区字段进行查询,服从会低于未分区表的雷同语句。但是随着数据量的增大,这种成本差距会渐渐减小,趋于相称。(500万数量级只相差10%左右)

6、CLR类型。

微软对CLR作了大篇幅的宣传,这是由于数据库产品终于融入.net系统中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。但是作了些试验,发现使用CLR的存储过程或函数在达到肯定的阀值的时候,体系性能会呈指数级下滑!这是特别很是伤害的!只使用几个可能没有题目,当一旦大规模使用会造成紧张的体系性能题目!

其实可以做一下类比,Oracle等数据库产品老早就支撑了java编程,而且提供了java池参数作为用户配置接口。但是如今有哪些体系大批使用了java存储过程!连Oracle本身的应用都没用!还不是性能有题目,否则面向对象的数据库早就实现了!

建议使用CLR的地方一样平常是和应用的复杂程度或操作体系环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。或者是要和操作体系进行Socket通信的场景。否则建议稳重!

7、索引视图。

索引视图2k就有。但是2005对其服从作了一些改动但是schema.viewname的作用域真是太限定了它的应用面。还有一大堆的环境参数和种种限定都让人对它有点却步。

8、语句和事务快照。

语句级快照和事务级快照终于为SQL Server的并发性能带来了突破。小我感觉语句级快照大家应该应用。事务级快照,假如是高并发体系还要慎用。假如一个用户总是被提醒修改不成功要求重试时,会杀人的!

9、数据库快照。

原理很简单,对要求长时间计算某临时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术照旧细粒度不够。

10、Mirror。

Mirror可以算是SQL Server的Data guard了。

二、开发方面

1、Ranking函数集。

其中最有名的应该是row_number了。这个终于解决了用一时表生成序列号的历史,而且SQL Server2005的row_number比Oracle的更先辈。由于它把Order by集成到了一路,不用像Oracle那样还要用子查询进行封装。但是大家细致一点。如下面的例子:

select ROW_NUMBER() OVER (order by aa)
from tbl
order by bb

会先实行aa的排序,然后再进行bb的排序。

可能有的同伙会抱怨集成的order by,其实假如使用ranking函数,Order by是少不了的。假如忧虑Order by会影响服从,可以为order by的字段建立聚集索引,查询计划会忽略order by 操作(由于原本就是排序的嘛)。

2、top。

可以动态传入参数,省却了动态SQL的拼写。

3、Apply。

对递归类的树遍历很有帮助。

4、CTE。

阅读清晰,特别很是偶然代感。

5、try/catch。

代替了原来VB式的错误判断。比Oracle高级不少。

6、pivot/unpivot。

小我感觉没有case直观。而且默认的第三字段(还可能更多)作为group by字段很容易造成新手的错误。

三、DBA管理方面

1、数据库级触发器。

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,如今有了作解决方案的同伙会很喜悦吧。

2、多加的体系视图和实时体系信息。

这些东西对DBA挑优特别很是有帮助,但是感觉粒度照旧不太细。

3、优化器的改动。

一向以来小我感觉SQL Server的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。

4、profiler的新事件观察。

这一点很好的增强了profiler的功能。但是提到profiler提示大家细致一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

5、sqlcmd

风俗敲饬令行的同伙可能会爽一些。但是功能有限。适合机器跑不动SQL Server Management Studio的同伙使用。

四、其它

1、登陆的控制。

始终遗憾SQL Server的登陆无法分配CPU/内存占用等指标数。假如你的SQL Server给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的体系带来很大的负担。而SQL Server假如能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

2、数据库物理框架没有变动。

undo和redo都放在数据库得transaction中,小我感觉是个败笔。假如说我们在设计数据库的时候考虑分多个数据库,可能能在肯定程度上避免I/O服从题目。但是同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的难堪。

3、照旧没有逻辑备份。

备份方面可能照旧一个老大难的题目。不能单独备份几个表总是感觉不爽。天真备份的题目不知道什么时候才能解决。

4、SSIS(DTS)太复杂了。

SQL Server的异构移植功能小我感觉最好了。(假如对比过SQL Server的链接服务器和Oracle的透明网关的同伙会发现SQL Server的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

曩昔的DTS轻盈简单。但是如今的SSIS虽然功能壮大了许多,但是总是让人感觉太麻烦。看看论坛中扣问SSIS的贴子就知道。做的功能太壮大了,每每会有许多用户不会用了。(T006)

 G.Xvg1kbf^C!yT

nT'f}X+(LX0r

[版权归原作者及coolcxm共同拥有,转载请注明出处]
 
上一篇:SQL查询慢的48个缘故原由分析 下一篇:MRP是什么意思