欢迎来到天天文库
浏览记录
ID:13671574
大小:125.54 KB
页数:6页
时间:2018-07-23
《数据库设计提高性能的几个方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据库设计提高性能的几个方法1.使用ROWLOCK减少锁。2.使用KEEPFIXEDPLAN提高性能(对于固定的SQL查询计划)声明setnocountonsettransactionisolationlevelreadcommittedSELECTSELECTTOP10@cnt=COUNT(*)FROMdbo.LessThanOrEqualsPredicatesWITH(ROWLOCKREADPAST)WHEREtnPass=1ANDuidPropID=@uidPredicateIDANDvtValue=@vtPredicateValueOPTION(KEEPFIXEDPLAN
2、)SELECT@uidProcID=uidProcessID,@uidActID=uidActivationIDFROMdbo.InstancesWITH(ROWLOCKREPEATABLEREADINDEX(CIX_Instances))WHERE(uidInstanceID=@uidInstanceID)OPTION(KEEPFIXEDPLAN)SELECTCOALESCE(MAX(CAST(empidASBIGINT)),0)+1FROMis_emppersonalWITH(XLOCK,PAGLOCK)OPTION(FORCEORDER)INSERTINSERTINTOdb
3、o.GreaterThanPredicatesWITH(ROWLOCK)(uidPropID,vtValue,uidPredicateGroupID,tnPass)VALUES(@uidPredicateID,@vtPredicateValue,@uidANDGroupID,@tnPass)UPDATEUPDATEdbo.PredicateGroupWITH(ROWLOCK)SETnNumFirstPassPredicates=nNumFirstPassPredicates+1FROMdbo.PredicateGroupWITH(ROWLOCKINDEX(CIX_Predicat
4、eGroup))WHEREuidPredicateANDGroupID=@uidANDGroupIDOPTION(KEEPFIXEDPLAN)DELETEDELETEFROMdbo.PartsWITH(ROWLOCK)FROM(SELECTTOP100uidPartIDFROMdbo.PartZeroSumWITH(ROWLOCK)ORDERBYnID)aspszJOINdbo.PartspWITH(ROWLOCK)ONpsz.uidPartID=p.uidPartIDOPTION(KEEPFIXEDPLAN,FORCEORDER)事务BEGINTRANSACTIONCOMMIT
5、TRANSACTION注释ROWLOCKREADPAST指定数据库引擎不读取由其他事务锁定的行和页。数据库引擎跳过这些行或页,而不是在释放锁之前阻塞当前事务。仅可在运行于READCOMMITTED或REPEATABLEREAD隔离级别的事务中指定READPAST。KEEPFIXEDPLAN强制查询优化器不因统计信息的更改而重新编译查询。FORCEORDER指定在查询优化过程中保持由查询语法指示的联接顺序UPDLOCK指定采用更新锁并保持到事务完成。REPEATABLEREAD指定事务在REPEATABLEREAD隔离级别运行时,使用相同的锁定语义执行一次扫描。INDEX(inde
6、x_val[,...n])指定查询优化器处理语句时要使用的索引的名称或ID。只能为每个表指定一个索引提示。(SELECT*FROMis_emppersonalWITH(INDEX(PK_is_emppersonal)))锁的粒度:锁的类型:(1)共享锁:共享锁用于所有的只读数据操作. (2)修改锁:修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象(3)独占锁:独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独占锁不能和其他锁兼容。 (4)架构锁结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定
7、义语言操作时,SQLServer采用Sch-M锁,编译查询时,SQLServer采用Sch-S锁。 (5)意向锁意向锁说明SQLServer有在资源的低层获得共享锁或独占锁的意向。 (6)批量修改锁批量复制数据时使用批量修改锁SQLServer锁类型 (1)HOLDLOCK:在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。 (2) NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELE
此文档下载收益归作者所有