SQL Server2005 数据类型和TSQL

这几天一直在看名为SQL Server2005实现与维护的蓝皮书,做点笔记。

数据类型:
 定义整数的类型主要选择int、smallint、tinyint, smallint对应32767,tinyint对应255. 尽量保证物尽其用,文章中一个例子说的很好,一行数据节省2-3个字节,那么10万行的数据可以节约2-3MB的空间,在一次全表查询的过程中可以节约相同数量的内存,考虑到数以千计的数据库查询量和表连接的情况,节省几个字节对于整个程序结构的性能非常有帮助。
 定义小数的类型最好用Decimal(a,b),其中a代表总位数,b代表小数位数;这样表示小数位数统一,操作效率也可以。相对而言,float和money类型尽量少用。

表:使用create table命令可以显式创建临时表,局部临时表:create table #production(...) 全局临时表:create table ##production(...),标名前用#标识局部临时表,##标识全局临时表,全局临时表对所有用户可见。create table 创建的临时表都存储在tempdb数据库中,创建完毕后应马上删除,节省资源。变量表是指以变量形式声明的表结构,declare @prodcution table(...),变量表存储在内存中,对应的函数、存储过程、触发器结束后自动销毁变量。

用户定义的类型UDT分为TSQL UDT和CLR UDT,TSQL UDT形式:create type [schema.] udp_MyType from varchar(30) not null ; CLR UDT需要启动数据库中的CLR服务,然后将C#等语言编写的类编译为dll文件加载至数据库实例中,该类型才可以使用。一般可以在日期类型、加密算法、少量代码实现的离散类型等方面应用CLR UDT。

SQL Server中索引通过B树构造,其本质就是将索引列数据重新按B树构架存储在数据页中,一般查找只需要访问2-3个数据页即可获得所需结果。聚集索引的叶级是表中的实际数据,因此,一个表中只能有一个聚集索引,一般情况下,聚集索引应该是主键。非聚集索引不会强制改变一个表的实际排序次序,所以一个表中可以建立多个非聚集索引。非聚集索引也是构建B树实现快速定位和查找,其与聚集索引不同之处在于,它的叶级页面不指向数据行的实际位置,而是指向聚集键值,再通过聚集键值来遍历聚集索引找到数据行的实际位置(由此可见聚集索引的重要作用)。但是,对于读操作来说,只需要显示数据而不用获得数据的实际位置,因此非聚集索引不需要再查找聚集键值,从而获得更好的效率。

posted on 2009-08-06 17:23  梁霄  阅读(602)  评论(0)    收藏  举报

导航