sqlserver 知识回顾

上传人:第*** 文档编号:53475089 上传时间:2018-09-01 格式:PPTX 页数:37 大小:389.72KB
返回 下载 相关 举报
sqlserver 知识回顾_第1页
第1页 / 共37页
sqlserver 知识回顾_第2页
第2页 / 共37页
sqlserver 知识回顾_第3页
第3页 / 共37页
sqlserver 知识回顾_第4页
第4页 / 共37页
sqlserver 知识回顾_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《sqlserver 知识回顾》由会员分享,可在线阅读,更多相关《sqlserver 知识回顾(37页珍藏版)》请在金锄头文库上搜索。

1、,Sqlserver 知识回顾,1.表(Table ) 2.索引(Index) 3.视图(View) 4.键 (key) 5.缺省值(Default) 6.规则(Rule) 7.触发器(Trigger) 8.存储过程(Stored Procedure) 9.用户(User) 10.函数 (Function) 11,常用数据库对象,影响R(read)的影响CUD(create update delete)操作的,以上的对象中,哪些是对性能有影响的,bigint System.Int64 ;binary System.Byte ;bit System.Boolean ;char System.St

2、ring ;datetime System.DateTime ;decimal System.Decimal ;float System.Double ;image System.Byte ;int System.Int32 ;money System.Decimal ;nchar System.String ;ntext System.String ; numeric System.Decimal ;nvarchar System.String ;real System.Single ;uniqueidentifier System.Guid ;smalldatetime System.Da

3、teTime ;smallint System.Int16 ;smallmoney System.Decimal ;text System.String ;timestamp System.Byte ;tinyint System.Byte ;varbinary System.Byte ;varchar System.String ;variant System.Object ;,数据类型与.net 类型的对应关系,索引树的工作原理如下图: 上图被称做为B+树,中间的节点包含一定数量的值,指示数据库引擎当从跟节点搜索一个索引值的时候如何遍历.如果这是一个聚集索引树,页节点是物理数据页.如果是非

4、聚集索引树,页节点包含包含索引值和与之对应的聚集索引值. 通常,在索引树里发现需要的值并且转到目标数据记录,对于数据库引擎来说花费的时间是很短的,所以,在数据库应用索引极大的提高了数据的检索操作.,一、索引简介,请跟随下列的步骤确保正确的索引包含在你的数据库里。 确保数据库的每个表有一个主健 这么做会确保每个表有一个聚集索引,通过主健的值,表的数据页通按物理顺序排列在磁盘上。所以,任何使用主健的数据检索操作,任何在主健字段的排序操作都能非常迅速的检索数据。 在这些列上创建非聚集索引 经常被作为搜索凭证的列 用来联合其它表的列 用来作为外健的列 用来排序的列 高选择性列 Xml类型,假设,在一个

5、Sales表 (SalesID,SalesDate,SalesPersonID,ProductID,Qty) salesID为主键,其上有聚集索引想想下面语句的查询执行过程:SELECT SalesDate, SalesPersonID FROM Sales WHERE ProductID=112,二、检索计划与执行过程,让我们假设:Sales表包含10,000行数据,下面的SQL语句选择400行。首先让我们弄明白在数据库引擎怎么执行SQL语句的:,数据检索过程,1.Sales表有在ProductID列一个非聚集索引,所以,首先查询非聚集索引树,发现包含ProductID=112的入口。,2.

6、包含ProductID=112入口的索引页同样同样也包含了cluster索引的值(所有的主健的值,即SalesID),3.对于每一个主健(共400个),数据库引擎进入聚集索引树来发现正确的行的位置,4.对于每一个主健,一旦发现正确的行的位置,数据库引擎会从匹配的行得到SalesDate和SalesPersonID的列的值。,在上述的步骤中,对于每一个ProductID=112的主键入口(共400个),数据库引擎必须搜索聚集索引树400次,来检索附加的列 (SalesDate,SalesPersonID)。怎么解决这个问题?,1、复合索引请注意,创建复合索引应当包含少数几个列,并且这些列经常在s

7、elect查询里使用。在复合索引里包含太多的列不仅不会给你带来太多好处。而且由于使用相当多的内存来存储复合索引的列的值,其后果是内存溢出和性能降低。2、include(),请注意,创建复合索引应当包含少数几个列,并且这些列经常在select查询里使用。在复合索引里包含太多的列不仅不会给你带来太多好处。而且由于使用相当多的内存来存储复合索引的列的值,其后果是内存溢出和性能降低。 当创建复合索引的时候,尽量使用数据库优化顾问 我们知道,一旦一个SQL开始运行,SQLSERVER引擎优化器基于以下几点动态的产生不同的检索计划。 数据量 统计 索引变化 TSQL的参数值,索引的注意事项,一旦一个SQL

8、开始运行,SQLSERVER引擎优化器基于以下几点动态的产生不同的检索计划。数据量 统计 索引变化,三、检索计划的产生,视图是通过一个唯一的簇索引来实现索引的。这实际上创建了和表中定义的簇索引略有不同的索引对象。虽然底层的表没有修改,但索引本身包含了所有数据的一个独立的副本。,四、视图索引,代价是对于在相关行上的每个插入、更新或者删除操作,必须实时维护索引 上的值。在一个繁忙的服务器上运行的高度事务化的系统中,这个性能成本是颇为明显的。,创建索引视图所要做的第一件事情是使用WITH SCHEMABINDING选项创建(或者更改)视图。CREATE VIEW vwFinlishedProduct

9、sAndCategories (.) WITH SCHEMABINDING AS .,视图索引的创建方法,在视图和模式被绑定后,要对视图进行索引,即在视图上创建一个唯一的簇索引。簇索引是以所创建的索引所在列的顺序组织的实际数据。唯一的簇索引与表上带簇索引的主键约束相同,每个行都必须可以唯一标识,按照该唯一列的顺序存储。 CREATE UNIQUE CLUSTERED INDEX clFinishedProducts ON vwFinlishedProductsAndCategories (ProductID) 如果有需要的话,也可以在视图的其他列上创建非簇索引。,视图定义中的 SELECT 语

10、句指定了一个 GROUP BY 子句,则唯一聚集索引的键只能引用在 GROUP BY 子句中指定的列。xml类型的列不能建立视图索引,视图索引注意事项,Service Broker是基于数库的一个消息平台,可以实现数据库级的异步消息通信,也可以实现数据库发生变化主动通知道应用程序,给SOA也就提供了更多的一个选 择,但是它的缺点就是效率没有MSMQ高,在使用它时需跟据使用要求的情况选择,选择它理由是当消息需要保证其安全、可靠传递、接收顺序时那它是一个比较 好的选择而且可以降低开发难度,因为MSMQ保证消息一定能到达目的地、安全、接收的先后顺序都需要自已做处理,而这些处理都非常的难以控制,而且效

11、果不 一定是那么的理想。,五、service broker,对话会话(dialog conversation )是两个端点之间的可靠的、顺序的、双向的消息传递。 独白会话(monolog conversation )是从发送端到多个接收端的可靠的、顺序的消息流;是从一个发送端到一批接收端的一组对话。 此功能SQL Server 2005中尚未实现。 Service Broker三个特征:可靠的、顺序的和异步的。,-消息(Messages)-约定(Contracts)-队列(Queues)-服务(Services),数据库中的锁是指一种软件机制,用来指示某个用户(也即进程会话,下同)已经占用了某

12、种资源,从而防止其他用户做出影响本用户的数据修改或导致数据库数据 的非完整性和非一致性。这儿所谓资源,主要指用户可以操作的数据行、索引以及数据表等。根据资源的不同,锁有多粒度(multigranular)的概 念,也就是指可以锁定的资源的层次。SQL Server中能够锁定的资源粒度包括:数据库、表、区域、页面、键值(指带有索引的行数据)、行标识符(RID,即表中的单行数据)。,六、数据库锁,SQL Server根据用户的请求,做出分析后自动给数据库加上合适的锁。假设某用户只操作一个表中的部分行数据,系统可能会只添加几个行锁(RID)或页面锁,这样可以尽可能多地支持多用户的并发操作。,锁的粒度

13、,但是,如果用户事务中频繁对某个表中的多条记录操作,将导致对该表的许多记录行都加上了行级锁,数据库系统中锁的数目会急剧增加,这样就加重了系统负荷, 影响系统性能。因此,在数据库系统中,一般都支持锁升级(lock escalation)。所谓锁升级是指调整锁的粒度,将多个低粒度的锁替换成少数的更高粒度的锁,以此来降低系统负荷。在SQL Server中当一个事务中的锁较多,达到锁升级门限时,系统自动将行级锁和页面锁升级为表级锁。 在SQL Server中,锁的升级门限以及锁升级是由系统自动来确定的,不需要用户设置。,粒度为什么升级,1 HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不

14、是在语句执行完立即释放所添加的锁。2 NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。3 PAGLOCK:指定添加页锁(否则通常可能添加表锁)。 4 READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上操作。 5 READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,READPAST仅仅应用于READ COMMITTED隔离性级别下事务操作中的SELECT

15、语句操作。 6 READUNCOMMITTED:等同于NOLOCK。 7 REPEATABLEREAD:设置事务为可重复读隔离性级别。 8 ROWLOCK:使用行级锁,而不使用粒度更粗的页级锁和表级锁。 9 SERIALIZABLE:用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于 HOLDLOCK。 10 TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,SQL Server在该语句执行完后释放这个锁,而如果同时指定了HOLDLOCK,该锁一直保持到这个事务结束。 11 TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整

16、个事务结束。 12 UPDLOCK :指定在读表中数据时设置更新 锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且 保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。,Sqlbulkcopy bcpSQLServer2008的新特性-表值参数(Table-Valued Parameter示例与性能,七、批量插入,八、数据库复制,sp_configure show advanced options, 1; GO RECONFIGURE; GO sp_configure clr enabled, 1; GO RECONFIGURE; GO,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号