聆听了公司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
分享到:
相关推荐
### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...
Oracle Database,作为全球最受欢迎的关系数据库管理系统,由甲骨文公司开发,具有卓越的可移植性、可操作性、功能强大、高可靠性、性能优异、并发处理能力强、高可用性、稳定性好以及吞吐量大等显著特点。...
《Oracle 9i资料库管理实务讲座》是一本专为Oracle初学者和使用经验不足的用户设计的指南书籍。Oracle数据库作为一款强大的关系型数据库系统,以其高度的灵活性和复杂性著称。这本书旨在帮助读者逐步掌握Oracle的...
第1课 轻松带你走进Oracle数据库的世界 第2课 从最简单的SQL语句开始 第3课 Oracle数据库的安装和配置 第4课 Oracle数据库的参数文件,控制文件,数据文件和日志文件 第5课 Oracle体系架构简述 第6课 Oracle...
走进Oracle 2 1. Oracle简介 3 2. Oracle安装 4 3. Oracle客户端工具 9 4. Oracle服务 16 5. Oracle启动和关闭 17 6. Oracle用户和权限 18 7. 本章总结 21 8. 本章练习 22 SQL数据操作和查询 25 1. SQL简介 26 2. ...
总的来说,"Oracle学习资料"会带你逐步走进Oracle的世界,从基本概念到高级应用,从数据库管理到性能优化,全面掌握Oracle数据库的使用和管理。通过深入学习,你可以成为一名熟练的Oracle DBA,为企业数据管理提供强...
**走进Oracle** Oracle数据库系统由Oracle公司开发,提供了数据存储、管理、备份和恢复等一系列功能。它的强大性能、高度可扩展性和安全性使得它成为许多企业的首选。 **Oracle简介** Oracle数据库采用SQL作为其...
总之,“Oracle入门学习资料精华”是一套全面的学习资源,它将带你逐步走进Oracle的世界,从基础概念到高级技术,从理论知识到实践操作,帮助你成为一名熟练的Oracle数据库管理员或开发者。通过深入学习和实践,你将...
总之,《Oracle Database 11g:初学者指南》这本书将带你逐步走进Oracle的世界,通过学习和实践,你将能够掌握Oracle 11g的基本操作和管理技巧,为进一步深入学习和应用打下坚实的基础。在探索过程中,不断实践和...
总的来说,"Oracle数据库实例视频教程01"将带你走进Oracle的世界,通过实际操作让你掌握Oracle数据库的基础知识和操作技巧。随着教程的深入,你将能够逐步建立起对Oracle数据库的全面认识,并具备处理日常数据库任务...
《MLDN最经典的ORACLE笔记》是李兴华老师倾力打造的一份全面而深入的Oracle学习资源,专为...总的来说,这份笔记是一份宝贵的Oracle学习资源,它将带你逐步走进Oracle的世界,领略数据库技术的魅力,提升你的专业技能。
这些PDF教程将引导你逐步走进Oracle DBA的世界,从基础知识到高级技术,全面提升你的数据库管理能力。通过深入学习并实践,你将有资格参加Oracle OCP认证考试,从而成为专业的Oracle数据库管理员。
这篇学习笔记将带你逐步走进Oracle的世界,了解其基本概念、安装配置、SQL语言以及数据库管理。 首先,Oracle数据库是甲骨文公司(Oracle Corporation)开发的关系型数据库系统,它支持多种操作系统平台,包括...
本书共有17章,涵盖的主要内容有:走进Oracle、认识PL/SQL、数据表的基本操作、表中数据的基本操作、数据的基本查询、查询中函数的使用、数据表的高级查询、索引及视图的使用、数据类型、流程控制、游标、存储过程和...
总之,Oracle.9i中文版基础教程将引导你逐步走进Oracle的世界,无论你是希望成为DBA还是需要使用Oracle处理数据,这都是一个理想的起点。通过深入学习和实践,你将能够熟练地管理和利用Oracle数据库的强大功能。
这本书通过深入浅出的方式,引领读者走进Oracle的世界,提升在数据库设计、管理、优化以及应用开发等方面的能力。 首先,Oracle数据库的基础架构是理解Oracle开发的关键。书中会详细介绍Oracle的数据存储模型,包括...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。这份"Oracle_note.rar"压缩包包含的...这本学习笔记将引导初学者逐步走进Oracle的世界,探索这个强大数据库系统的奥秘。
总的来说,“Oracle 9I入门”教程将带你逐步走进Oracle的世界,从基础操作到高级特性,让你能够熟练地管理和维护Oracle数据库。无论是对数据库管理员还是开发人员来说,掌握Oracle 9I都是职业生涯中不可或缺的一环。...
1. **走进 Oracle** - **Oracle 安装**:安装 Oracle 数据库涉及到选择合适的版本、配置硬件需求以及按照官方指南进行系统安装。在安装过程中,要确保操作系统兼容性、设置适当的内存分配和磁盘空间。 - **创建...