代码改变世界

SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)

2013-12-24 16:55 by 渔者, 179 阅读, 0 推荐, 收藏, 编辑
摘要:接上文SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)五、锁与事务隔离级别事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。SQLServer数据库引擎支持所有这些隔离级别:·未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据)·已提交读(数据库引擎的默认级别)·可重复读·可序列化(隔离事务的最高级别,事务之间完全隔离)SQLServer还支持使用行版本控制的两个事务隔离级别。一个是已提交读隔离 阅读全文

SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)

2013-12-24 16:54 by 渔者, 158 阅读, 0 推荐, 收藏, 编辑
摘要:二、完整的锁兼容性矩阵(见下图)对上图的是代码说明:见下图。三、下表列出了数据库引擎可以锁定的资源。名称资源缩写编码呈现锁定时,描述该资源的方式说明数据行RIDRID9文件编号:分页编号:Slot编号用于锁定堆中的单个行的行标识符。索引键KEYKEY76字节哈希值索引中用于保护可序列化事务中的键范围的行锁。分页PAGEPAG6文件编号:分页编号数据库中的8KB页,例如数据页或索引页。范围EXTENTEXT8文件编号:范围的第一个分页的编号一组连续的八页,例如数据页或索引页。HoBT堆或B树。用于保护没有聚集索引的表中的B树(索引)或堆数据页的锁。数据表TABLETAB5数据表ID(OBJID字 阅读全文

SQL SERVER的锁机制(一)——概述(锁的种类与范围)

2013-12-24 16:53 by 渔者, 233 阅读, 0 推荐, 收藏, 编辑
摘要:SQL SERVER的锁机制系列:SQL SERVER的锁机制(一)——概述(锁的种类与范围)SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)锁定:通俗的讲就是加锁。锁定是MicrosoftSQLServer数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制。定义:当有事务操作时,数据库引擎会要求不同类型的锁定,如相关数据行、数据页或是整个数据表,当锁定运行时,会阻止其他事务对已经锁定的数据行、数据页或数据表进行操作。只有在当前 阅读全文

SQL语句练习实例之十——SQL SERVER 行转列的性能测试

2013-12-24 16:52 by 渔者, 323 阅读, 0 推荐, 收藏, 编辑
摘要:在数据库设计时,有时候为了实现数据规范化的目的,会将属于同一个人的属性记录值改用多条记录的方式来存储,显示时又希望将多个属性数据合并成一行来显示,这就是行转列。例如:下图的成绩记录表。那么行转列的效率又将如何呢?我试了以下三种方式进行行转列的测试。测试数据表中的记录数量为120万条,字段为10个,测试下来感觉性能还不错。一、第一种方式(SQL 2000以后的版本)--总计120万记录SELECTwbook_no , MAX(CASEWHEN[COP_G_NO] ='60174257'THENAR END) "60174257", MAX(CASEWHEN[C 阅读全文

SQL Server 查询性能优化——索引与SARG(四)

2013-12-24 16:46 by 渔者, 175 阅读, 0 推荐, 收藏, 编辑
摘要:上接SQL Server 查询性能优化——索引与SARG(三)说明:下文中所说的创建索引都是SQL Server 查询性能优化——索引与SARG(一)中开头部分所说明的索引列表中的索引。 例:下面表格中说的索引1(聚集索引)和索引5(非聚集索引)4: 小心使用OR操作符 如上文SQL Server 查询性能优化——索引与SARG(三)中的例子中WBK_PDE_LIST_ORG_HISTROY表创建了索引2,即在[QTY_1]字段建立索引,通过该索引.就可以从大量记录中.快速找出符合记录的记录(如上文中的“2 请不要进行负向查询”中表格中的序号2,逻辑读取43次,执行成本0.121935),再在 阅读全文

SQL Server 查询性能优化——索引与SARG(三)

2013-12-24 16:45 by 渔者, 241 阅读, 0 推荐, 收藏, 编辑
摘要:上接SQL Server 查询性能优化——索引与SARG(二)2 请不要进行负向查询除了不应该对字段数据进行计算外,非SARG语句的格式语句还包含在WHERE条件子句中,使用负向查询操作符。如NOT、!=、、!>、!312有主键(索引1,索引2)3表'WBK_PDE_LIST_ORG_HISTROY'。扫描计数1,逻辑读取1314次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。13141.03687无主键(索引2)4表'WBK_PDE_LIST_ORG_HISTROY'。扫描计数1,逻辑读取1306次,物理读取0次,预读 阅读全文

SQL Server 查询性能优化——索引与SARG(二)

2013-12-24 16:42 by 渔者, 198 阅读, 0 推荐, 收藏, 编辑
摘要:接 SQL Server 查询性能优化——索引与SARG(一)对于非SARG语句,SQLSERVER必须评估每一条记录以决定它是否符合WHERE子句的条件。所以索引对于采用非SARG条件的查询通常没什么用处。而通过非SARG语句通常包含以下操作:NOT、!=、、!>、!SELECT * FROM [WBK_PDE_LIST_ORG_HISTROY] where wbook_no='BE404942450020' and g_no='11844' 1) 例一与例二查询的IO读写数 表'WBK_PDE_LIST_ORG_HISTROY'。扫描计 阅读全文

SQL Server 查询性能优化——索引与SARG(一)

2013-12-24 16:41 by 渔者, 387 阅读, 0 推荐, 收藏, 编辑
摘要:这一篇文章修修改改,已经写了很久了,还是感觉好像自己没讲清楚,鉴于本人水平,就先这样写吧,待本人水平提高之后,再进行修补。在写作的过程也学习到了,SQL查询优化程序也并不一定会使用查询参数中字段的相关索引,而是根据查询数据量的多少而产生的查询成本,来决定是使用查询参数中的字段索引,还是使用聚集索引或全表扫描。中心思想就是关于SQL语句的“查询参数”(SARG)与索引的使用。符合SARG格式的数据肯定会使用到相应的索引呢?先给出答案,不是。例如:Select*fromWBK_PDE_LIST_ORGwherecop_g_no='11000',假设在cop_g_no上建立了非聚集索 阅读全文

SQL Server 查询性能优化——创建索引原则(二)

2013-12-24 15:51 by 渔者, 226 阅读, 0 推荐, 收藏, 编辑
摘要:在昨天的SQL Server 查询性能优化——创建索引原则(一)主要介绍了一下原理,今天是一些主要的原则,及对已经创建好的索引检测。三:索引的建立原则 一般来说,建立索引要看数据使用的场景,换句话来说哪些访问数据的SQL语句是常用的,而这些语句是否因为缺少索引(也有可能是索引过多)变的效率低下。但绝不是所有的SQL语句都要建立索引,如果所有的SQL语句都建立索引,那么可能导致建立过多的索引。 我碰到过每秒钟新增记录超过千条的案例,虽然该数据表仅有聚集索引,但因为已存在的键值字段的值和新增数据键值字段的值并不是按顺序递增,每次新增记录时,肯定造成整体数据行的重新排列。在移掉聚集索引后,性... 阅读全文

SQL Server 查询性能优化——创建索引原则(一)

2013-12-24 15:48 by 渔者, 378 阅读, 0 推荐, 收藏, 编辑
摘要:索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以。但是索引对于提高查询性能也不是万能的,也不是建立越多的索引就越好。索引建少了,用WHERE子句找数据效率低,不利于查找数据。索引建多了,不利于新增、修改和删除等操作,因为做这些操作时,SQLSERVER除了要更新数据表本身,还要连带地立即更新所有的相关索引,而且过多的索引也会浪费硬盘空间。因此要建得恰到好处,这就需要经验了。一:索引的基本目的 索引的基本目的是在大量数据中找寻少量数据。你可以想像一下,若一本书有700页,就像数据表有700个数据页,而索. 阅读全文