走进Oracle

  聆听了公司DBA团队chenli同事分享的《走进oracle》。受益匪浅。记录下来:

主要讲解了:
   1.基本元素(表,数据块,记录,rowid)
   2.访问堆表 (数据块,rowid,全表扫描,stop机制)
   3.访问B树索引(唯一扫描,范围扫描,快速全扫描索引),以及举例那些性能差的sql为啥没使用到索引。
典型的一个b树索引 4.执行计划 举例如下: 1 问:在索引字段上施加函数,为什么性能差 to_char(gmt_create,’ mmdd’) =‘0101’ 答:因为无法使用索引 正确的写法: gmt_create between to_date('20090101','yyyymmdd') and to_date('20090102','yyyymmdd') 用索引范围扫描 总结:要使用索引条件里的字段必须可以孤立出来(或oracle可以优化出来)。不能潜逃在oracle函数里。 2 问:在索引字段上用全模糊,为什么性能差 member_id like ‘%alibaba%’ 答:因为无法使用索引。 正确的做法:B树索引无法解决这种需求。考虑用其他技术手段代替,比如搜索引擎。 3 问:索引是 (member_id, group_id), 为什么这个性能差 where group_id=89721 答:用了索引快速全扫描 或者 其他低效的扫描方式。 正确的做法:创建以group_id为首列的索引,使用索引范围扫描。 4问:计数为什么有时候count(id)比count(*)慢? 答:count(id)等价于 count(*) where id is not null,如果没有(id)索引,那么会用全表扫描,而count(*)会自动选择最优的索引用索引快速全扫描。 正确的写法:计数统一使用count(*)。 5 问:索引(member_id, subject)这两句性能有差别吗? (A): select subject from offer where member_id=#member_id#; (B): select subject, gmt_create from offer where member_id=#member_id#; 答:两句都用了索引范围扫描,(B)还需要根据索引中查到的ROWID访问表里的记录,当对应的记录数较多时,比(A)的性能差很多。 6 如何优化此sql: SELECT * FROM (SELECT t.*, rownum AS rn FROM (SELECT * FROM blog.blog_article WHERE domain_id = :1 AND draft = 0 ORDER BY domain_id, draft, gmt_create DESC) t WHERE rownum <= :2) WHERE a.rn >= :3 答:在索引内完成过滤/排序/分页,取得一页的ROWID,用它们再去跟原表做join。SELECT t.* FROM (SELECT rid, rn FROM (SELECT ROWID AS rid, rownum AS rn FROM blog.blog_article WHERE domain_id = :1 AND draft = 0 ORDER BY domain_id, draft, gmt_create DESC) WHERE rownum <= :2) a, blog.blog_article t WHERE a.rn >= :3 AND a.rid = t.ROWID 常去这里看看: DBA团队blog,最贴近阿里巴巴业务场景 http://www.alidba.net ITPUB,国内人气最旺最权威的Oracle论坛 http://www.itpub.net/forum-3-1.html Oracle基本概念,经典中的经典 http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/toc.htm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值