Oracle-表连接简介
2012-07-17 14:09:49 来源:WEB开发网核心提示:可以在SQL语句中添加HINTS(/*+ use_hash(a b)*/),强制ORACLE优化器产生哈希连接的执行计划,3. 排序合并连接(SORT MERGE JOIN)排序合并连接内部处理的流程:1) 优化器判断第一个源表是否已经排序,Oracle-表连接简介(2),如果已经排序,则到第3步,哈希连接查
可以在SQL语句中添加HINTS(/*+ use_hash(a b)*/),强制ORACLE优化器产生哈希连接的执行计划。
3. 排序合并连接(SORT MERGE JOIN)
排序合并连接内部处理的流程:
1) 优化器判断第一个源表是否已经排序,如果已经排序,则到第3步,否则到第2步。
2) 第一个源表排序
3) 优化器判断第二个源表是否已经排序,如果已经排序,则到第5步,否则到第4步。
4) 第二个源表排序
5) 已经排过序的两个源表进行合并操作,并生成最终的结果集。
在缺乏数据的选择性或者可用的索引时,或者两个源表都过于庞大(所选的数据超过表记录数的5%)时,排序合并连接将比嵌套循环连更加高效。
排列合并连接需要比较大的临时内存块用于排序,这将导致在临时表空间占用更多的内存和磁盘I/O。可以在SQL语句中添加HINTS(/*+use_merge(a b) */),强制ORACLE优化器产生排序合并连接。
4. 比较
表连接的比较:
3. 排序合并连接(SORT MERGE JOIN)
排序合并连接内部处理的流程:
1) 优化器判断第一个源表是否已经排序,如果已经排序,则到第3步,否则到第2步。
2) 第一个源表排序
3) 优化器判断第二个源表是否已经排序,如果已经排序,则到第5步,否则到第4步。
4) 第二个源表排序
5) 已经排过序的两个源表进行合并操作,并生成最终的结果集。
在缺乏数据的选择性或者可用的索引时,或者两个源表都过于庞大(所选的数据超过表记录数的5%)时,排序合并连接将比嵌套循环连更加高效。
排列合并连接需要比较大的临时内存块用于排序,这将导致在临时表空间占用更多的内存和磁盘I/O。可以在SQL语句中添加HINTS(/*+use_merge(a b) */),强制ORACLE优化器产生排序合并连接。
4. 比较
表连接的比较:
深入地理解和掌握oracle的表连接对于优化数据库的性能至关重要。由于优化器选择方式的不同,以及统计信息的缺失或统计信息的不准确,ORACLE自动选择的表连接方式不一定是最优的。当出现多表连接时,需要仔细分析是否有更佳的连接条件。根据系统的特点,必要时可以在SQL中添加HINTS,从而改变SQL的执行计划,从而达到性能优化的目的
Oracle的优化器的RBO和CBO方式:
1、基于规则的优化方式(Rule-Based Optimization,简称为RBO)
优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则,对数据是不敏感的。它只借助少量的信息来决定一个sql语句的执行计划,包括:
1)sql语句本身
2)sql中涉及到的table、view、index等的基本信息
3)本地数据库中数据字典中的信息(远程数据库数据字典信息对RBO是无效的)
例如:我们常见的,当一个where子句中的一列有索引时去走索引。但是需要注意,走索引不一定就是优的,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)的效率更优。
2、基于代价的优化方式(Cost-Based Optimization,简称为CBO)
它是看语句的代价(Cost),通过代价引擎来估计每个执行计划所需的代价,该代价将每个执行计划所耗费的资源进行量化,CBO根据这个代价选择出最优的执行计划。一个查询所耗费的资源可分为三部分:I/O代价、CPU代价、NETWORK代价。I/O是指把数据从磁盘读入内存时所需代价(该代价是查询所需最主要的,所以在优化时一个基本原则就是降低I/O总次数);CPU代价是指处理内存中数据所需的代价,数据一旦读入内存,当我们识别出我们所要的数据后,会在这些数据上执行排序(sort)或连接(join)操作,这需要消耗CPU资源;对于访问远程节点来说,network代价的花费也是很大的。
优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息(dbms_stat.analyze)。
如星型连接排列查询,哈希连接查询,函数索引,和并行查询等一些技术都是基于CBD的。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接