作为一个开发人员,我们也许不会接触到复杂sql的操作,按照Tom大叔的话,我们大部分开发人员把数据库当做了一个黑盒子,而且神秘不可控制。如果老是这样的想的话,恐怕迟早有一天我们会被社会淘汰。如今,精明的DBA都在向应用靠拢了,我们这些应用程序员当然也需要加强在数据库的知识,兴许有一天你会很牛,但说起数据库你一问三不知,会被人笑道的。
今天参加了公司组织的一个简短的oracle的培训,讲师是oracle的资深专家,讲的还可以,也顺便让我复习了一下一些基本的概念。
当用户在客户端(sqlplus,java 程序,pl/sql)提交了一个查询后,过了一会就返回一些结果回来了,这个过程是那么神奇,那么后台(oracle server)都干了些什么了?接下来的一些过程会让我们清楚的了解到oracle做了些什么,但是在解释这些过程之请,先回顾一下基本概念。
oracle是什么,没启动之前,他就是一推文件,数据文件,参数文件,日志文件...。启动了后就是文件+进程+内存了,这就是oracle instance。至于文件有那些文件,进程有哪些进程,内存又有那些分类,这里不详细列出了,只说一下和本文有关系的一些。
- 共享池-shared Pool。顾名思义,这个东东是oracle在运行期间共享一些东西的地方,它包括数据字典,一些参数,以及最重要的一些oracle程序。比如我们提交的查询在完成解析之前,会搜索共享池看是否有完成的查询,如果有的话,直接就用这个了。
如果在共享池中找不到和我们一样的查询,那么oracle就开始解析这个查询了,接下来oracle会做哪些事情呢?先看看这个图:
在上图中,其中的消耗最大的是parse阶段。在上图中我不打算深入的了解具体每一步是在干什么,因为本文的目的是关于优化的。默认情况下,oracle会在parse后有一个优化器,这个优化器会去根据一些数据判断后生成一个执行计划,这个执行计划才是我们关注的东西。
影响一个查询优化器的一些因素有:访问路径,join顺序,join方法。
其中访问路径有以下几种:全表扫描、rowid扫描、索引扫描、聚簇扫描、hash扫描。
join方法有以下几种:
- Nested-loop join。内部嵌套,适合驱动表数据量不大,被驱动表有索引的连接。
- Hash join。适合一个大表一个小表的连接。
- Sort-merge join。适合没有索引,但是数据已经排好序了的。
其中hash join是一种效率相对比较高的连接方式尤其适合一个大表和一个小表连接的时候。
更多的关于hash join参考http://www.hellodba.com/Doc/Oracle_Hash_Join.htm
查询优化器的输出是一个执行计划,这个执行计划就是我们衡量一个查询的的相对指标,为什么说是一个相对指标呢?同样的一个业务查询,由于我们的连接方式不同,索引使用的不同会产生不同的查询计划,通过不同的查询计划可以看到谁的效率更高。但是此业务查询和彼业务查询的查询计划是没有可比性的,数据来源,数据逻辑都不一样嘛。
查询计划是优化器的输出,这个输出是优化器自己对多种计划比较后的最优化结果。先来看看查询计划是个什么东东吧,以便有个感性的认识。
上图是我在pl/sql developer中一个查询计划的截图。
查询计划就是优化器在执行sql时一系列的步骤。我们有很多种方式查看查询计划:
- EXPLAIN PLAN命令
- SQLPLUS的autotrace
- V$SQL_PLAN视图
- Automatic Workload Repository:10g的一个新工具
- SQL TRACE
- Statspack
- 以及一些客户端工具,比如pl/sql developer
有了查询计划我们可以通过计划查看我们为表建立的索引是否管用,是否使用了我们所期待的索引,是否按照我们期待连接方式去连接,如果不一样的话那么我们就需要调整了。先解释一下上图中的解释计划。解释计划中缩进最多的是最里层,也就是最先执行的部分。
- 使用索引IDX_EMP扫描emp表,这样获取到了rowid。
- 使用索引IDX_EMP_S扫描emp_salary表。
- 做一个nested loop的连接
- 再通过rowid访问emp_salary过滤id为1001的。
这样看也许还不是很直接的感受执行计划,如果使用hints的话会直观的感受执行计划的改变。
很显然,通过hints,执行计划马上就变了,cost成本上升很快。
更过关于hints的信息,参考http://www.dba-oracle.com/t_sql_hints_tuning.htm
以上的部分只是作为一个检验我们的sql的手段,真正的一些优化手段很多很多,具体根据业务而定,但是每一种手段都有他的利弊,适用条件,学习的时候切勿囫囵吞枣,否则只会越优化越差了。
- 大小: 39.7 KB
- 大小: 21.1 KB
- 大小: 40.6 KB
- 大小: 32.2 KB
- 大小: 28.1 KB
分享到:
相关推荐
【超易懂实用,初学者必看】oracleSQL优化培训,由企业dba切身实际经验总结,超简单易懂超实用,初入门者不看必后悔!!
详细介绍sql执行原来,SQL优化实例和技巧
Oracle SQL优化是数据库管理中的关键任务,旨在提高查询性能,减少资源消耗,从而提升系统整体效率。本培训主要涵盖以下几个核心知识点: 1. **SQL性能分析**:对SQL语句进行性能分析是优化的第一步。这包括查看SQL...
大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 50余改写调优案例:覆盖大多数DBA日常工作场景,具有相当大的实用价值 技巧+案例:可以作为DBA的参考手册,也可以作为开发人员编写SQL...
本PPT深入探讨了Oracle SQL优化的各种方面,旨在帮助读者理解SQL执行过程,掌握优化技巧,提升系统性能。 **1. 优化基础知识** - **性能管理**:早期介入,设定明确目标,持续监控,团队协作,及时应对意外和变化,...
### Oracle SQL基础培训知识点概述 #### 一、数据类型 在Oracle SQL中,数据类型用于定义表中的列以及变量的数据格式。数据类型的选择对于确保数据的正确存储与处理至关重要。 ##### 1. 字符型数据类型 - **CHAR...
ORACLE 培训 SQL 性能优化 在本课程中,我们将深入探讨 SQL 语句执行的过程、ORACLE 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容,帮助大家逐步掌握 SQL 优化的过程。 首先,让我们了解...
教主Oracle SQL高级查询优化改写完美培训视频 2.0版,这个我参与培训的,包含视频、SQL文件、教学文档内容完整,分享给大家学习,共同努力进阶转型开发DBA,人称教主,做sql改写十多年了,sql改写功底很强!
这份"Oracle Sql 语句大全 培训内部资料"显然包含了广泛的信息,旨在帮助用户掌握和提升在Oracle环境中使用SQL的能力。以下是根据标题、描述和标签提炼的一些关键知识点: 1. **SQL基础**:SQL(Structured Query ...
oracle性能优化高级培训,硬件-->体系结构-->SQL--->索引优化---->等待事件--->跟踪
### Oracle性能优化培训知识点 #### 一、Oracle性能优化概览 在Oracle性能优化过程中,主要涉及以下几个方面:磁盘I/O优化、内存优化、CPU优化以及查询优化等。通过这些方面的综合调整与优化,可以显著提升Oracle...
标题与描述均指向了一个主题——Oracle高级SQL培训与讲解,特别是关于WITH子句的深入探讨。这份文档由李康康撰写,旨在教授读者如何高效地使用WITH子句,以及理解其提升查询性能的机制。 ### Oracle高级SQL中的WITH...
以下是一份详细的Oracle SQL调优培训大纲,涵盖了基础概念、关键组件以及调优策略。 1. **Oracle数据库体系结构** - 进程结构:了解Oracle后台进程的作用,如DBWR(数据库写进程)、LGWR(日志写进程)和PMON...
本次的"Oracle SQL培训"旨在提供全面而深入的指导,帮助学习者掌握Oracle SQL的核心概念和技术,从而能够高效地利用数据库进行工作。下面将详细阐述Oracle SQL的关键知识点。 1. **SQL基础**: - **数据查询语言**...
10. 性能调优:通过EXPLAIN PLAN分析查询执行计划,了解如何使用绑定变量、物化视图、数据库统计信息和SQL优化顾问来提升查询性能。 通过Oracle 10g SQL基础培训,你将能够熟练地在Oracle环境中执行SQL查询,进行...
《基于Oracle的SQL优化》...《基于Oracle的SQL优化》适用于使用Oracle数据库的开发人员、OracleDBA和其他对Oracle数据库感兴趣的人员,也可以作为各院校相关专业的教学辅导和参考用书,或作为相关培训机构的培训教材。
总的来说,Oracle数据库SQL培训旨在帮助用户熟练掌握高级查询技术,理解并应用SQL优化策略,以便在实际工作中更高效地处理和分析数据。通过具体的案例讲解,学习者能够将理论知识转化为实际操作,提升数据库管理效率...
《基于Oracle的SQL优化》...《基于Oracle的SQL优化》适用于使用Oracle数据库的开发人员、OracleDBA和其他对Oracle数据库感兴趣的人员,也可以作为各院校相关专业的教学辅导和参考用书,或作为相关培训机构的培训教材。
5. **SQL优化策略与工具**:提供了SQL调优技巧和使用工具,如SQL Tunning Tips,帮助开发人员提高SQL效率。 6. **应用程序级调优**:重点在于SQL语句调优和管理变化的调优,这包括调整SQL语句、数据设计、流程设计...