- 浏览: 1399811 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (346)
- linux (10)
- hbase (50)
- hadoop (23)
- java (52)
- java multi-thread (13)
- Oracle小记 (41)
- 机器学习 (12)
- 数据结构 (10)
- hadoop hive (16)
- java io (4)
- jms (1)
- web css (1)
- kafka (19)
- xml (2)
- j2ee (1)
- spring (6)
- ibatis (2)
- mysql (3)
- ext (3)
- lucene (3)
- hadoop pig (3)
- java nio (3)
- twemproxy (1)
- antlr (2)
- maven (6)
- mina (1)
- 列数据库 (1)
- oozie (2)
- mongodb (0)
- 报错 (0)
- jetty (1)
- neo4j (1)
- zookeeper (2)
- 数据挖掘 (3)
- jvm (1)
- 数据仓库 (4)
- shell (3)
- mahout (1)
- python (9)
- yarn (3)
- storm (6)
- scala (2)
- spark (5)
- tachyon (1)
最新评论
-
guokaiwhu:
赞啊!今晚遇到相同的问题,正追根溯源,就找到了博主!
hbase 报错gc wal.FSHLog: Error while AsyncSyncer sync, request close of hlog YouAr -
喁喁不止:
很清楚,有帮助。
hive常用函数 -
dsxwjhf:
Good job !!
kafka获得最新partition offset -
Locker.Xai:
参考了
freemaker教程 -
maoweiwer:
为啥EPHEMERAL_SEQUENTIAL类型的节点并没有自 ...
zookeeper 入门讲解实例 转
看了一篇oracle执行顺序滴,感觉挺好滴
转http://blog.csdn.net/wonth/article/details/1598446
1。分析
分析是处理SQL语句的第一步,它是SQL语句处理过程较为重要的一步,它又包含几个方面:
(1)语法分析,oracel是采用数据库常用的自底向上的分析方法,包含检查语法规范,命名规范,它是处理SQL语句中最消耗时间且代价最高的步骤,主要表现在绑定变量和存储过程等方面:
A.绑定变量:这也是为什么使用在某种情况下绑定变量方式会比非绑定方式效率和性能高出几倍,主要是绑定变量只会编译一次,随后就会把查询计划存储在一个共享池里,以便以后获取和重用这个查询计划。
B.存储过程:存储过程比一般的SQL语句要快,就是它不用再次编译,而且还可以利用数据库里许多特性,使得它的速度会比一般SQL语句快很多
(2)语义分析,学过编译原理的都知道,这一步是非常重要的,ORACLE主要是分析SQL语句格式是否正确,各个对象是否存在,以及它是否有足够的权限执行
(3)视图转换,它会将涉及的视图的查询语句转换为较为简单的等效连接表达式,有些人认为视图一定执行速度会比使用表要快,其实不一定的,主要具体情况具体分析,只要把这篇文章真正理解,自己分析是不困难的;
(4)表达式转换。将复杂的SQL表达式转换为相应的对基表的查询语句。写SQL的标准
A.不要再WHERE字句中进行计算,如SELECT AT_ID FROM ARTICLE WHERE AT_ID >10*10000 AND AT_ID<(10+1)*10000是不允许的就是这个原理
B.注意数据类型的匹配
SELECT BK_ID FROM BOOK WHERE BK_PRICE>30 就比不上SELECT BK_ID FROM BOOK WHERE BK_PRICE>30.00好啦
(5)选择优化器,学过编译原理时候就知道,使用不用的优化器是会有不同的执行效率,当然,最好是能根据批量的SQL自己编一个特定的优化器
(6)选择连接方式。INFORMIX就有简单的归并连接 和排序-归并连接技术之分,主要看是否使用索引的问题。
(7)选择连接顺序。多表连接,oracle选择那一个对表先连接,并选择源数据表
(8)选择数据搜索路径,根据以上条件选择合适的数据搜苏路径,如选用全表搜索还是利用索引或是其他方式搜索
(9)到SQL中为该SQL语句找到一个共享SQL区,如已经有共享SQL区,则直接执行共享区内容。
2。执行
主要在于使用UPDATE和DELETE语句时,必须将行锁定,以免其他用户修改。ORACLE先从数据库缓冲区中寻找是否存在所要的数据块,如果存在,就直接读或修改,否则从物理文件中读到数据库缓冲区中。
3。返回结果
对SELECT 语句需要返回结果的语句,首先看是否需要排序,需要,则排序后返回给用户,然后根据内存的大小不同,可以一次取出一行数据,一可以一次取一组数据。这时,可能要用到数据结构中的外部排序,并归排序等算法,所以如内存允许的话,尽量大会提高性能的;
最后总结一下经用使用的SELECT的处理步骤:
打开游标
|
---------查看共享SQL区,是否有相同的SQL语句
| |
| 分析
| |
| 定义
------------------------ |
|
------------------------- 绑定变量
| |
| 捆绑
--------------- ----------- |
|
并行处理
|
执行查询
|
返回结果
|
关闭游标
发表评论
-
oracle报错 ora-14300:partition key maps to a partition outside maximum pemitted nu
2014-02-28 20:57 2025可能由两个原因造成 1.partition数量超过 ... -
oracle自动分区 (时间 数字)
2014-01-21 20:15 8928按照时间,每天分区 create table test_p ... -
oracle WM_CONCAT行转列
2013-08-03 16:01 1458Sql代码 ... -
oracle语法备忘-游标
2012-12-18 15:27 1117oracle的游标备忘 显示游标 declar ... -
oracle语法备忘-循环
2012-10-26 15:50 1076oracle循环语句 loop while for 测 ... -
oracle 函数
2012-10-08 14:59 1012转 http://lwxjjgc.iteye.com/blog ... -
oracle 插入字符串
2012-10-08 14:16 3330一直都认为oracle有插入方法,可是没找到,就写了一个凑 ... -
oracle exception
2012-10-05 21:19 1264转 http://www.cnblogs.com/huyong ... -
oracle if else
2012-09-29 15:30 3856oracle中的if else if inst ... -
oracle 分页存储过程
2012-09-29 12:49 1379查询oracle时,做存储过程实现分页 c ... -
oracle 获取表,列注释
2012-09-28 16:23 2012前段时间,自己用的表好长,列好多(这是谁设计滴) 所以给自己 ... -
to_char
2012-09-27 11:34 0to_char转换数字 to_char(31 ... -
oracle 分区
2012-09-26 15:32 1066创建分区 --先声明一下:列表分区不支持多列,但是范围 ... -
oracle 语法备忘录
2012-09-26 14:15 0-- 游标 cursor object_cursor ... -
oracle 绑定变量
2012-09-26 12:48 1131不太喜欢看到在procedure用||拼接sql的语句 所以 ... -
jdbc insert数据后获取ID
2012-09-20 16:21 4500有时insert数据,数据ID为自动生成,需要获取ID。 ... -
Oracle生成uuid
2012-09-20 09:22 0select sys_guid() from dual; ... -
oracle 实现自增auto_increament
2012-09-19 12:53 1390在mysql中,实现字段自增,只用给他设置为auto_incr ... -
jdbc 报错 - 索引中丢失 IN 或 OUT 参数:
2012-09-19 12:45 5478jdbc 报错 - 索引中丢失 IN 或 OUT 参数: ... -
oracle for update nowait
2012-09-14 15:38 1050当两个用户同时更新同一条记录是, 使用select for u ...
相关推荐
Oracle执行计划详解,包括oracle执行顺序和索引详细介绍
"Oracle 执行计划详解" Oracle 执行计划是数据库性能优化的关键。为了更好地理解和优化 Oracle 数据库的执行计划,我们需要了解执行计划的生成过程、优化方法和执行计划的解读方法。 执行计划生成过程 执行计划的...
在Oracle数据库中,触发器的执行顺序遵循特定规则,通常分为BEFORE触发器和AFTER触发器。BEFORE触发器在数据库执行DML操作之前执行,而AFTER触发器在DML操作之后执行。每种类型的触发器又分为行级触发器(ROW级...
### Oracle EBS Forms 触发器执行顺序详解 Oracle E-Business Suite (EBS) 是一个集成的企业资源规划 (ERP) 解决方案,它利用了 Oracle 的技术来提供全面的业务流程管理。其中,Oracle Forms 是一个强大的工具,...
2. 在同一级如果某个动作有子 ID,就需要查看子 ID 的执行顺序。 例如,一个简单的执行计划示例如下: Query Plan ----------------------------------------- SELECT STATEMENT [CHOOSE] Cost=1234 TABLE ACCESS ...
Oracle Form 触发器的执行顺序 Oracle Form 是 Oracle E-Business Suite R12 中的一个功能强大且灵活的开发工具,用于创建复杂的商业应用程序。其中,触发器(Trigger)是一种非常重要的组件,它可以根据不同的事件...
2. **执行顺序(Execution Order)**:显示了Oracle执行各个操作的顺序。 3. **成本(Cost)**:优化器预估的执行每个操作所需的CPU和I/O资源的成本。 4. **行源(Rows Produced)**:预计每一步将返回多少行数据...
### SQL语句执行顺序说明 #### 一、SQL语句准备执行阶段 当SQL语句进入Oracle的库缓存后,为了确保其能够被正确执行,Oracle会经历一系列的检查和准备过程。这一阶段主要涉及以下几个步骤: 1. **语法检查**:...
### Oracle执行计划深入解析 #### 引言 在数据库领域,尤其对于大型企业级应用,Oracle数据库因其强大的功能和稳定性而被广泛采用。在Oracle中,执行计划是数据库优化器根据SQL语句特性生成的一系列步骤,用于指导...
除了以上概念,Oracle执行计划还包括其他访问方法,如索引扫描(Index Scan)、索引唯一扫描(Index Unique Scan)、索引快速全扫描(Index Fast Full Scan)以及各种类型的连接操作,如嵌套循环(Nested Loop)、...
执行计划包括对每个被访问表的访问路径以及表的连接顺序和相应的连接方法。访问路径描述了如何从数据库中获取数据,常见的包括: 1. **全表扫描**(Full Table Scan):遍历整个表,读取所有行。 2. **ROWID扫描**...
ORACLE 执行计划和 SQL 调优 ORACLE 执行计划和 SQL 调优是关系数据库管理系统中非常重要的概念。执行计划是 Oracle 优化器生成的,用于描述如何访问数据库中的数据的计划。execute plan 中包括了访问路径、表扫描...
ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率 在Oracle中,SQL语句的执行顺序是非常重要的。了解了SQL语句的执行顺序,我们可以更好地优化SQL语句,提高查询效率。下面我们将详细介绍ORACLE-Select语句...
ORACLE 优化 SQL 语句提高 Oracle 执行效率 Oracle 是一个功能强大的关系数据库管理系统,然而,如果不正确地使用 SQL 语句,可能会导致执行效率低下。为了提高 Oracle 的执行效率,需要遵循一些最佳实践。下面是...
Oracle 执行计划详解 ...执行计划的顺序是从上到下,从左到右。 Oracle 执行计划是 Oracle 数据库在执行查询语句时所采取的访问路径的表示。了解执行计划对于优化查询语句、提高数据库性能至关重要。
Oracle 执行计划 Oracle 执行计划是 Oracle 数据库中的一种机制,用于确定如何访问存储器,得到需要的结果集。执行计划的主要内容包括访问方式和访问顺序。下面是 Oracle 执行计划的详细知识点: 一、执行计划的...
解读执行计划时,应遵循“从上到下,由右及左”的原则,但需注意,阅读顺序并不完全等于实际执行顺序。执行计划可能包含多个并行操作,因此理解每个操作及其顺序对于优化查询至关重要。 ### SQL优化的核心策略 SQL...
Oracle DML 触发器的执行顺序 Oracle 中的 DML 触发器是一种存储在数据库中的 PL/SQL 块,能够自动响应特定事件,以实现一些复杂的业务规则。DML 触发器可以分为三种基本类型:数据操纵语句 (DML) 触发器、数据定义...