您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 开发人员对数据库性能优化的深入理解
开发人员对数据库性能优化的深入理解易车网王泊weibo.com/brantwong提纲性能问题的出现性能问题的定位性能问题的分析、解决开发人员对数据库性能优化的深入理解性能问题的出现性能问题的出现访问量过多SQL语句性能差业务复杂硬件问题开发人员对数据库性能优化的深入理解性能问题的定位性能问题的定位来源IO(setstatisticsIOon)逻辑读取物理读取CPU(setstatisticstimeon)编译时间执行时间性能问题的定位逻辑读取查询所需访问从缓存区页的次数物理读取从磁盘读取的页数性能问题的定位编译时间执行时间setstatisticstimeon开发人员对数据库性能优化的深入理解性能问题的分析执行计划SQL语句被编译成执行计划迭代器内存消耗分类、哈希聚合、哈希链接非阻断迭代器与阻断迭代器计划缓存和重编译计划缓存即席查询自动化参数预定义查询,使用sp_executesql或API存储过程或其他编译对象(触发器、TVF等等)索引结构聚集索引一表一个非聚集索引一表多个扫描和查找扫描查找堆表扫描聚集索引聚集索引扫描聚集索引查找非聚集索引索引扫描索引查找索引覆盖查询(单列)可覆盖Col=1Col100ColBETWEEN1AND10Collike‘100%’ColIN(2,6,7,9)不可覆盖ABS(Col)=1Col+1=9Collike‘%abc’索引覆盖查询(多列)查找命中Col1=1andCol2=2Col1=1andCol24剩余谓词Col1100andCol2=2Col1like‘abc%’andCol2=4查找未命中Col2=2Col1+1=9andCol2Between1and9Col1like‘%abc’andCol2in(1,2,3)索引覆盖查询(多列)关键列已覆盖列书签查找输出列决定书签查找索引查找聚集索引查找(RID查找)INNERJOIN连接嵌套循环合并连接哈希连接嵌套循环(内连接)ForeachrowR1intheoutertableForeachrowR2intheinnertableIfR1joinswithR2Return(R1,R2)嵌套循环(外连接)ForeachrowR1intheoutertableBeginForeachrowR2intheinnertableIfR1joinswithR2Output(R1,R2)IfR1didnotjoinOutput(R1,null)End合并连接GetfirstrowR1frominput1GetfirstrowR2frominput2WhilenotattheendofeitherinputBeginIfR1JOINSWITHR2BEGINOUTPUT(R1,R2)GETNEXTROWR2FORMR2EndElseifR1R2GetnextrowR1frominput1ElseGetnextrowR2frominput2End哈希连接ForeachrowR1inthebuildtableBeginCalculatehashvalueonR1joinkeysInsertR1intotheappropriatehashbucketEndForeachrowR2intheprobetableBeginCalculatehashvalueonR2joinkeysForeachrowR1inthecorrespondinghashbucketifR1joinwithR2Output(R1,R2)End连接特点对比嵌套循环合并连接哈希连接最佳用于相对小的输入,同时又索引在内表的连接键上中大型输入,同时有索引在等值连接键上提供排序或者在连接后排序数据仓库需要中型或大型输入,可扩展的并发执行并发性支持大的并发有索引提供排序支持大并发小并发阻断和继续否否是需要等值否是是外连接半连接只有左链接全部全部使用tempdb否是(对多对多)是需要排序否是否保留排序是(只对于外输入)是否支持游标是否否聚合聚合函数聚合种类流聚合哈希聚合聚合聚合函数COUNTSUMAVGMINMAX流聚合ClearthecurrentaggregateresultsClearthecurrentgroupbycolumnsForeachinputrowIftheinputrowdoesnotmatchthecurrentgroupbycolumnsBeginOutputthecurrentaggregateresultClearthecurrentaggregateresultsSetthecurrentgroupbycolumnstotheinputrowEndUpdatetheaggregateresultwiththeinputrowend哈希聚合ForeachinputrowBeginCalculatehashvalueongroupbycolumnsCheckforamatchingrowinthehashtableIfmatchingrownotfoundInsertanewrowintothehashtableElseUpdatethematchingrowwiththeinputrowEndOutputallrowsinthehashtable联合UnionAllUnion子查询不相关vs.相关子查询标量vs.多行子查询高级索引运算动态索引运算索引联合索引交叉索引视图增删改INSERTDELETEUPDATE锁(rowlock、tablelock、slock、xlock)自连接的应用表设计三范式反范式约束聚集索引的位置非聚集索引的位置计算列综合算法分页TOP颠覆法链接方式IN的问题*Hints查询Hint表Hint*架构数据库架构应用程序架构总结性能问题出现的原因计划缓存与重编译执行计划与迭代器表设计分页迭代器表扫描聚集索引扫描索引扫描索引查找聚集索引查找排序标量计算嵌套循环合并连接哈希连接流聚合哈希聚合串联判定脱机Q&A谢谢
本文标题:开发人员对数据库性能优化的深入理解
链接地址:https://www.777doc.com/doc-1029383 .html