- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
开发人员对数据库性能优化的深入理解概要
开发人员对数据库性能优化的深入理解
易车网 王泊 /brantwong
提纲
性能问题的出现
性能问题的定位
性能问题的分析、解决
开发人员对数据库性能优化的深入理解
性能问题的出现
性能问题的出现
访问量过多
SQL语句性能差
业务复杂
硬件问题
开发人员对数据库性能优化的深入理解
性能问题的定位
性能问题的定位
来源
IO(set statistics IO on)
逻辑读取
物理读取
CPU(set statistics time on)
编译时间
执行时间
性能问题的定位
逻辑读取
查询所需访问从缓存区页的次数
物理读取
从磁盘读取的页数
性能问题的定位
编译时间
执行时间
set statistics time on
开发人员对数据库性能优化的深入理解
性能问题的分析
执行计划
SQL语句被编译成执行计划
迭代器
内存消耗
分类、哈希聚合、哈希链接
非阻断迭代器与阻断迭代器
计划缓存和重编译
计划缓存
即席查询
自动化参数
预定义查询,使用sp_executesql或API
存储过程或其他编译对象(触发器、TVF等等)
索引结构
聚集索引
一表一个
非聚集索引
一表多个
扫描和查找
扫描
查找
堆
表扫描
聚集索引
聚集索引扫描
聚集索引查找
非聚集索引
索引扫描
索引查找
索引覆盖查询(单列)
可覆盖
Col=1
Col100
Col BETWEEN 1 AND 10
Col like ‘100%’
Col IN (2,6,7,9)
不可覆盖
ABS(Col)=1
Col+1=9
Col like ‘%abc’
索引覆盖查询(多列)
查找命中
Col1=1 and Col2=2
Col1=1 and Col24
剩余谓词
Col1100 and Col2=2
Col1 like ‘abc%’ and Col2=4
查找未命中
Col2=2
Col1+1=9 and Col2 Between 1 and 9
Col1like ‘%abc’ and Col2 in (1,2,3)
索引覆盖查询(多列)
关键列
已覆盖列
书签查找
输出列决定书签查找
索引查找
聚集索引查找(RID查找)
INNER JOIN
连接
嵌套循环
合并连接
哈希连接
嵌套循环(内连接)
For each row R1 in the outer table
For each row R2 in the inner table
If R1 joins with R2
Return (R1,R2)
嵌套循环(外连接)
For each row R1 in the outer table
Begin
For each row R2 in the inner table
If R1 joins with R2
Output(R1,R2)
If R1 did not join
Output(R1,null)
End
合并连接
Get first row R1 from input 1
Get first row R2 from input 2
While not at the end of either input
Begin
If R1 JOINS WITH R2
BEGIN
OUTPUT(R1,R2)
GET NEXT ROW R2 FORM R2
End
Else if R1R2
Get next row R1 from input 1
Else
Get next row R2 from input 2
End
哈希连接
For each row R1 in the build table
Begin
Calculate hash value on R1 join keys
Insert R1 into the appropriate hash bucket
End
For each row R2 in the probe table
Begin
Calculate hash value on R2 join keys
For each row R1 in the corresponding hash bucket
if R1 join with R2
Output (R1,R2)
End
连接特点对比
嵌套循环
合并连接
哈希连接
最佳用于
相对小的输入,同时又索引在内表的连接键上
中大型输入,同时有索引在等值连接键上提供排序或者在连接后排序
数据仓库需要中型或大型输入,可扩展的并发执行
并发性
支持大的并发
有索引提供排序
支持大并发
小并发
阻断和继续
否
否
是
需要等值
否
是
是
外连接 半连接
只有左链接
全部
全部
使用tempdb
否
是(对多对多)
是
需要排序
否
是
否
保留排序
是(只对于外输入)
是
否
支持游标
文档评论(0)