【版本特性】sql server2008版本特性(含2008R2)
【0】概述
- 对超过64个内核CPU的支持。在SQL2008中最多只支持64个CPU核,现在R2中可以支持256个核了!!!
【1】SQL类
【1.1】TVP(2008), 表变量,临时表,CTE 的区别
TVP:Table-values parameter(TVP):自定义表类型
/* 创建表类型.*/ create type Type_test as table(keyId int,info varchar(30)); go /* 创建一个存储过程以表值参数作为输入 */ create Procedure pr_testTable(@tmp Type_test readonly) as select *,getdate() from @tmp; go
TVP和临时表都是可以索引的,他们两以及表变量总是存在tempdb中,会增加系统数据库开销,而CTE只有在内存溢出时才会被写入tempdb中。
对于数据量大,并且反复使用,反复进行查询关联的,建议使用临时表或TVP,数据量小,使用表变量或CTE比较合适
【1.2】万能数据类型:sql_variant
可以存放所有数据类型,相当于C#中的object数据类型
create table test1(id sql_variant) insert into test1 values(1) insert into test1 values('a') insert into test1 values('2020-05-07') insert into test1 values(0.12) select * from test1
【1.3】增加数据类型:datetime2,datetimeoffset
datetime 时间有效期较小,在1753-1-1 之前就不能使用了,精度为毫秒级别,而datetime2 数据范围相当于C#中的datetime ,精度达到了秒后面小数点后7位,datetimeoffset则是考虑是时区的日期类型
date 存入的数据格式为:yyyy-mm-dd datetime 存入的数据格式为:yyyy-mm-dd hh:mm:ss.fff(精确到1毫秒) datetime2 存入的数据格式为:yyyy-mm-dd hh:mm:ss.fffffff(精确到0.1微秒) datetimeoffset 存入的数据格式为:yyyy-mm-dd hh:mm:ss(精确到0.1为微秒)
SQL的日期函数进行赋值,dateTime字段类型要用 GETDATE() ,dateTime2字段类型要用 SYSDATETIME() 。
datetime2支持datetime.minvalue,即0001/01/01
【1.4】Merge 的使用
语法很简单就不说了,主要是处理两张表某些字段对比后的操作。
基本使用详细参考:sql server2008 中的merge
语法参考官网:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver15
需注意 when not matched (by target) 与 when not matched by source的区别。
前者是是针对对比后目标表不存在的记录,可以选择insert操作,而后者则是针对对比后目标表多出来的记录,可以选择delete或update操作
【1.5】rowversion 类型(时间戳)
代替以前的timestamp,时间戳,8字节二进制值,常用来进行解决并发操作的问题
【1.6】稀疏列
关于稀疏列的详细介绍,请参考 http://msdn.microsoft.com/zh-cn/library/cc280604.aspx
关于列集的详细介绍,请参考 http://msdn.microsoft.com/zh-cn/library/cc280521.aspx
稀疏列是SQL Server2008新引入的一种特殊的数据结构。
它们主要用于处理重复的场景,其中的列只是偶尔会用到。大部分时候为空。许多时候,一旦遇到少量这类列,就意味着以后可能会遇到大量这类列。使用稀疏列,可以将单个表中允许的列的总数提高到30000。
30000个列,什么概念?什么系统用得到这么多列。
Image、text、ntext、geography、geometry、timestamp和所有用户自定义数据类型不能被标记为稀疏列。
【1.7】列存储
详细参考使用:(4.12)2012及以上列存储索引
【1.8】FileStream(存储非结构化数据)
作用参考:使用SQL Server 2008管理非结构化数据
【1.9】过滤索引
其实这个很简单,就是和一般的建立索引一样,只不过这个可以加条件过滤。
--一般形式 CREATE NONCLUSTERED INDEX <index name> ON <table> (<columns>) WHERE <criteria>; GO --简单实例演示 CREATE NONCLUSTERED INDEX idxwhere_SalesOrderDetail_UnitPrice ON Sales.SalesOrderDetail(UnitPrice) WHERE UnitPrice > 1000
【2】实例、数据库级别功能
【2.1】资源调控器
可以用此来具体分配CPU、内存等等资源的额度与限制
【2.2】数据压缩(行压缩/页压缩)
SQL Server 2008中引入了数据压缩的功能。允许在表、索引和分区中执行数据压缩。
好处:这样不仅可以大大节省磁盘的占用空间,还允许将更多数据页装入内存中,从而降低磁 盘IO,提升查询的性能。
坏处:凡事有利有弊,在启用数据压缩后,数据库服务器就需要额外的CPU资源来进行压缩处理。一般说来,数据库服务器的CPU占 用率不会太高,而磁盘IO容易成为瓶颈,所以在大多数情况下对大数据库特别是数据仓库启用该项功能还是利大于弊。
SQL Server 2008的数据压缩分为行压缩和页压缩两种。
行压缩:主要是通过将固定长度类型存储为可变长度类型来实现,同时还减少了与记录相关联的元数据开销。
页压缩:在行压缩的基础上又增加了前缀压缩和字典压缩,能获得更大的压缩率。
启用数据库压缩:
--只需在建表语句后加入 WITH (DATA_COMPRESSION = ROW)或是WITH (DATA_COMPRESSION = PAGE)即可。 --如需将现有的索引修改为启用压缩,可通过下面的方式 ALTER INDEX index ON Table REBUILD WITH (DATA_C0MPRESSION=ROW) ALTER INDEX index ON Table REBUILD WITH (DATA_C0MPRESSION=PAGE)实现。
最后提供一段简单的用以判断是否需要压缩数据表的脚本,并自动生成压缩脚本供系统管理员执 行。
这里用到未公开的存储过程sp_MSforeachtable(详细参考:用法)。在这段脚本中@precommand参数用于执行command指令执行前的SQL命 令。
建立一张临时表用于保存数据表的信息,@command1参数表示需要执行的SQL命令,对每一张表都利用sp_spaceused存储过程获取表的 磁盘占用信息并保存到建立的临时表中。
@postcommand参数用于执行command指令后的SQL命令,将之前建立的临时表与系统关联,根据设置 的条件(数据表占用空间大于10G)生成数据表压缩脚本。
exec sp_MSforeachtable @precommand=N' create table ##( id int identity, name sysname, rows int, reserved Nvarchar(50), data varchar(50), indexdata varchar(50), unused varchar(50))', @command1=N'insert into ##(name,rows,reserved,data,indexdata,unused) exec sp_spaceused ''?'' update ## set data=SUBSTRING(data, 1, LEN(data) - 2) where id=scope_identity() AND LEN(data) >=2', @postcommand=N'SELECT ''ALTER TABLE '' + TABLENAME + '' REBUILD WITH ( DATA_COMPRESSION = PAGE )'' FROM sys.tables A JOIN (SELECT C.name + ''.'' + A.name AS TABLENAME, object_id FROM ## A JOIN sys.objects B ON A.name = B.name JOIN sys.schemas C ON B.schema_id = C.schema_id WHERE CAST(data AS int) > 10000000 AND object_id IN (SELECT object_id FROM sys.tables)) B ON A.object_id = B.object_id AND type = ''U'';drop table ##'
【2.3】备份压缩
sql server会自动启用一套压缩算法,压缩备份文件
t-sql:backup database test to disk='URL' with compression
SSMS:任务=》备份=》选项=》设置压缩备份
【2.4】可以热插拔CPU
【2.5】数据加密(数据库秘钥、列加密、透明加密)
详细参考:SQL Server中的加密
更详细参考:https://www.cnblogs.com/xwdreamer/archive/2012/08/21/2648561.html
【2.6】SSMS的改进(活动监视器、分区向导、注册服务器、调试)
SSMS在SQL Server 2008这个版本中的改进 【转载】
【2.7】主数据服务(BI)
安装:https://www.cnblogs.com/studyzy/archive/2009/12/28/sqlserver2008r2-mds-setup.html
【2.8】PowerPivot(数据处理与excel)
使用手册:https://technet.microsoft.com/zh-cn/library/ee940706.aspx?f=255&MSPPError=-2147217396
下载:https://www.microsoft.com/zh-cn/download/details.aspx?id=7609
【2.9】策略管理(比如可以给存储过程定义命名规则,不按照这个规则的就报错异常)
详细参考:sql server2008中的策略
【2.10】跟踪更改(change tracking)
sql server2008中的更改跟踪(Chang Tracking)
【2.11】FIleStream文件流
【2.12】CDC变更捕获
参考:SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑
【2.13】审计(audit)
SQL Server Audit (Database Engine)
SQL Server Audit Action Groups and Actions
sys.fn_get_audit_file (Transact-SQL)
参考:https://www.cnblogs.com/gered/p/9707724.html
【3】2008R2
SQL Server 2008的R2版本马上就要放出CTP了,其中最令人兴奋的就是R2中提供了主数据管理的功能,下面简单说一下R2中到底为我们带来了哪些新特性:对超过64个内核CPU的支持。在SQL2008中最多只支持64个CPU核,现在R2中可以支持256个核了!!!提供对硬件资源进行深入监控的仪表、报表之类的,可以帮助用户调优SQL Server,提高硬件资源的发挥和保证系统的健康运行。
SSMS得到了进一步的增强,以提供更多的功能、策略、报表等来帮助用户管理数据库。
提供了主数据服务(MDS),企业中的主数据可以直接通过SQL Server进行管理了。
在BI上进行了加强,新的“data mash up”功能实现了数据的收集、集成,数据集成工作变得更强大更容易;提供了Excel2010的插件用于在Excel中进行数据分析;报表的设计和展示也进行了增强,变得更易上手使用。
对地理空间数据类型进行了增强,支持地理空间可视化。
和SharePoint2010进行了集成,可以通过SharePoint来对分析报表进行共享。同时可以在SharePoint中对SQL Server的策略和BI等进行强大的配置和管理。
虽然列出了这么多,但是在我看来总体就是3点:提供了主数据管理,我觉得这是R2的最大亮点。
对原有的数据库引擎相关功能进行了增强,比如硬件支持、地理空间数据、SSMS等。
在BI上进行了进一步的加强,能够与下一代产品如Excel2010、SharePoint2010等集成,使得BI功能更强大,更易用。