2019《数据库性能优化》课件.ppt

2019《数据库性能优化》课件.ppt

ID:57100962

大小:707.50 KB

页数:39页

时间:2020-07-31

2019《数据库性能优化》课件.ppt_第1页
2019《数据库性能优化》课件.ppt_第2页
2019《数据库性能优化》课件.ppt_第3页
2019《数据库性能优化》课件.ppt_第4页
2019《数据库性能优化》课件.ppt_第5页
资源描述:

《2019《数据库性能优化》课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据库性能优化B2B-DBA-陈立-2019年Q3主题基本元素访问堆表访问B树索引案例分析执行计划基本元素-总览一本字典---------------一个表字典中的一页----------一个数据块一个字的解释----------一笔记录页码跟行号------------ROWID基本元素-堆表物理上由若干数据块组成物理上的分界线:HighWaterMark逻辑上由若干数据行组成每笔数据的唯一地址:ROWID基本元素-数据块保存数据的最小容器读取数据的最小单位(8k或16k,固定大小)基本元素-ROWID访问一笔记录的最快方式ROWID只是一个坑

2、,不是一个萝卜,用它来访问数据虽然快,但是不安全。因为随着DELETE/INSERT操作,坑里埋的萝卜会变。坑还是原来的坑,萝卜已经不是原来的萝卜了。访问堆表-全表扫描全表扫描用多快读的方式访问高水位线以下的所有数据块哪怕这些数据块里现在都没有数据哪怕最终只得到少量的记录就像在一本没有索引的字典里找出所有单人旁的字,你必须将整本字典从头到尾查阅一遍。访问堆表-ROWID访问访问指定ROWID的记录最快的访问方式查看字典中第X页第Y行的字访问堆表-STOP机制查询到指定的记录数之后就停止扫描无需借助索引,也不必访问整张表的所有数据块在字典中找出5个

3、笔画数为20的字访问B树索引-典型结构访问B树索引-特点自索引的索引平衡树-----每个叶节点到根节点的距离相等叶节点之间存在有序链表结构对=,>,<,>=,<=,like‘a%’等操作效率极高对<>,like‘%a%’,like‘%a’操作效率差访问B树索引-索引唯一扫描访问B树索引-索引范围扫描访问B树索引-索引快速全扫描Selectcount(*)fromtable1访问B树索引-代价索引唯一扫描:o(1)------索引的层次数索引范围扫描:o(n)------所需要返回的叶块索引快速全扫描:o(N)----所有叶块实际问题-1问:在索引

4、字段上施加函数,为什么性能差to_char(gmt_create,’mmdd’)=‘0101’答:因为无法使用索引正确的写法:gmt_createbetweento_date('20090101','yyyymmdd')andto_date('20090102','yyyymmdd')用索引范围扫描实际问题-2问:在索引字段上用全模糊,为什么性能差member_idlike‘%alibaba%’答:因为无法使用索引。正确的做法:B树索引无法解决这种需求。考虑用其他技术手段代替,比如搜索引擎。实际问题-3问:索引是(member_id,group_

5、id),为什么这个性能差wheregroup_id=89721答:用了索引快速全扫描或者其他低效的扫描方式。正确的做法:创建以group_id为首列的索引,使用索引范围扫描。实际问题-4问:计数为什么有时候count(id)比count(*)慢?答:count(id)等价于count(*)whereidisnotnull,如果没有(id)索引,那么会用全表扫描,而count(*)会自动选择最优的索引用索引快速全扫描。正确的写法:计数统一使用count(*)。实际问题-5判断member_id在offer表中是否存在记录,哪个写法性能好?(A):s

6、electcount(*)fromofferwheremember_id=#member_id#;(B):selectcount(*)fromofferwheremember_id=#member_id#andrownum<=1;两种写法都用了索引范围扫描,(B)在这个基础上还用到了STOP机制,查到第一笔记录之后就立刻停止了扫描,所以性能更好。实际问题-6问:索引(member_id,subject)这两句性能有差别吗?(A):selectsubjectfromofferwheremember_id=#member_id#;(B):select

7、subject,gmt_createfromofferwheremember_id=#member_id#;答:两句都用了索引范围扫描,(B)还需要根据索引中查到的ROWID访问表里的记录,当对应的记录数较多时,比(A)的性能差很多。实际问题-7问:这个SQL如何优化?SELECT*FROM(SELECTt.*,rownumASrnFROM(SELECT*FROM._articleWHEREdomain_id=:1ANDdraft=0ORDERBYdomain_id,draft,gmt_createDESC)tWHERErownum<=:2)WH

8、EREa.rn>=:3实际问题-7答:在索引内完成过滤/排序/分页,取得一页的ROWID,用它们再去跟原表做join。SELECTt.*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。