oracle查询优化--修改执行计划_20090425
Oracle的执行计划查看方法

Oracle的执行计划查看方法Oracle在执行一个SQL之前,首先需要看一下SQL的执行计划,然后在按照执行计划执行SQL,分析执行计划的工作是由优化器来执行的,在不同的条件下,一个SQL可能存在多条执行计划,但是在某个特定的时间点,特定的环境下,一定只有一种执行计划是最优的。
1、 Oracle的优化方式Oracle有两种优化方式:RBO(Rule-Based Optimization)和CBO(Cost-Based Optimization)RBO: 优化器在分析SQL语句的时候所遵循的优化规则是基于Oracle内部预定的一些规则。
CBO: 优化器字分析SQL语句的时候主要是看语句执行的开销(Cost),这里的代价主要指CPU和内存,优化器在判断是否使用这种方式的时候,主要参照的是表及索引的统计信息。
统计信息给出表的大小,有多少行,每行的长度等信息。
2、优化器的优化模式优化模式包括:Rule, Choose, First Rows, All Rows四种模式。
Rule:走基于规则的模式。
Choose:默认情况下Oracle使用这种优化模式,当一个表或索引有统计信息的时候,走CBO的方式;如果表或索引没有统计信息,表又不是特别的小,且相应的字段有索引,则走RBO的方式。
在缺省情况下,ORACLE采取Choose的优化模式,为了避免不必要的Full Table Scan,尽量避免采取此种优化模式,而直接采取CBO或者RBO的优化模式。
First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。
没有统计信息则走基于规则的方式。
需要注意的是:First Rows和All Rows是有冲突的。
oracle优化方案

千里之行,始于足下。
oracle优化方案Oracle优化方案Oracle数据库是当今企业界最受欢迎的关系型数据库管理系统之一。
但是,随着数据量的不断增加和业务需求的不断增长,数据库的性能问题也会逐渐变得突出。
因此,对Oracle数据库进行优化是提高系统性能和运行效率的关键。
本文将介绍几个常见的Oracle数据库优化方案,帮助您更好地管理和优化您的数据库环境。
1. 索引优化索引是提高查询性能的关键。
可以通过以下几个方面对索引进行优化:(1)合理选择索引类型:根据查询的特点和数据分布选择合适的索引类型,如B-tree索引、位图索引等。
(2)避免过多的索引:过多的索引会增加数据插入、更新和删除的成本,并降低查询性能。
只保留必要的索引,可以有效提高性能。
(3)定期重建和重新组织索引:定期重建和重新组织索引可以提高索引的查询效率,减少碎片和冗余。
2. SQL优化SQL语句是Oracle数据库的核心,对SQL进行优化可以显著提高数据库的性能。
以下是一些SQL优化的建议:第1页/共3页锲而不舍,金石可镂。
(1)优化查询语句:避免使用不必要的子查询,尽量使用连接查询代替子查询,减少查询次数。
同时,避免使用全表扫描,可以通过创建合适的索引来提高查询效率。
(2)避免使用不必要的OR运算符:OR运算符的查询效率较低,应尽量避免使用。
可以通过使用UNION或UNION ALL运算符代替OR运算符来提高性能。
(3)避免使用ORDER BY和GROUP BY子句:ORDER BY和GROUP BY子句会造成排序和分组操作,对于大数据集来说是非常耗时的。
如果可能,可以考虑使用其他方式来实现相同的功能。
3. 系统资源优化合理配置和管理系统资源是确保数据库运行稳定和高效的重要因素。
以下是一些建议:(1)合理分配内存:根据系统和数据库的实际需求,合理分配内存资源。
调整SGA(System Global Area)区域的大小,确保适当的内存分配给缓冲池和共享池。
查看ORACLE执行计划的几种常用方法

查看ORACLE执⾏计划的⼏种常⽤⽅法SQL的执⾏计划实际代表了⽬标SQL在Oracle数据库内部的具体执⾏步骤,作为调优,只有知道了优化器选择的执⾏计划是否为当前情形下最优的执⾏计划,才能够知道下⼀步往什么⽅向。
执⾏计划的定义:执⾏⽬标SQL的所有步骤的组合。
我们⾸先列出查看执⾏计划的⼀些常⽤⽅法:1. explain plan命令PL/SQL Developer中通过快捷键F5就可以查看⽬标SQL的执⾏计划了。
但其实按下F5后,实际后台调⽤的就是explain plan命令,相当于封装了该命令。
explain plan使⽤⽅法:(1) 执⾏explain plan for + SQL(2) 执⾏select * from table(dbms_xplan.display);实验表准备:SQL> desc test1;Name Null Type----------------------------------------- -------- ----------------------------T1ID NOT NULL NUMBER(38)T1V VARCHAR2(10)SQL> desc test2;Name Null Type----------------------------------------- -------- ----------------------------T2ID NOT NULL NUMBER(38)T2V VARCHAR2(10)实验:SQL> set linesize 100SQL> explain plan for select t1id, t1v, t2id, t2v from test1, test2 where test1.t1id = test2.t2id;Explained.第⼀步使⽤explain plan对⽬标SQL进⾏了explain,第⼆步使⽤select * from table(dbms_xplan.display)语句展⽰出该SQL的执⾏计划。
oracle执行计划优化深入解读

oracle执行计划优化深入解读优化执行计划是Oracle数据库性能优化的重要步骤之一。
执行计划是Oracle查询优化器生成的一组指令,告诉数据库引擎如何执行查询语句。
通过深入解读和优化执行计划,可以显著提高查询性能。
首先,了解执行计划的基本原理是十分重要的。
执行计划是由优化器生成的,它是一种指导数据库引擎在执行查询语句时的操作顺序和方法的方式。
了解执行计划中的各种操作符(如全表扫描、索引扫描、连接操作等)以及它们的执行顺序对于优化执行计划至关重要。
在深入解读执行计划时,我们可以从几个方面入手。
首先,要关注执行计划中的成本估算。
优化器会根据统计信息、索引选择和查询语句的逻辑结构等因素,估算每个操作的成本,并选择成本最低的执行计划。
通过审查这些成本估算,我们可以找到性能瓶颈,并进行相应的优化。
其次,考虑适当的索引设计是优化执行计划的关键因素之一。
索引可以极大地提高查询性能。
通过创建正确的索引,我们可以帮助优化器选择最佳的执行计划。
例如,对于频繁进行查询的列,我们可以创建索引来加速查询的速度。
此外,我们还应该关注查询的统计信息。
统计信息是优化器做出决策的重要依据。
正确收集和维护统计信息对于优化执行计划至关重要。
定期收集统计信息并确保其准确性是优化执行计划的关键步骤之一。
最后,我们可以使用Oracle提供的工具来调整和优化执行计划。
例如,通过使用HINTS,我们可以直接指示优化器选择特定的执行计划。
此外,通过使用SQL Profile或SQL Plan Baseline,我们可以将已经优化过的执行计划应用于特定的查询语句。
在优化执行计划时,还需要注意一些常见问题。
例如,避免全表扫描、避免不必要的连接操作、合理设置索引等。
通过综合分析查询的逻辑结构和数据特征,我们可以识别出这些问题,并进行相应的优化。
综上所述,深入解读和优化执行计划是提高Oracle数据库查询性能的重要步骤。
通过了解执行计划的基本原理,审视成本估算、索引设计、统计信息和使用合适的工具,我们可以显著提高查询性能,并优化数据库的整体性能。
Oracle数据库的查询优化技巧

Oracle数据库的查询优化技巧在实际的应用中,Oracle数据库查询一直是数据库开发人员和DBA 们关注的焦点之一。
为了更加高效地使用数据库,查询优化技术变得尤为重要。
本文将介绍一些Oracle数据库查询优化的技巧。
1. 索引的使用索引是加速查询的主要手段之一。
但是,索引不是越多越好。
对于频繁更新或插入数据的表,索引会对性能产生不利影响。
因此,需要根据实际情况来选择索引。
a. 索引的选择选择能够支持特定查询的索引是至关重要的。
在选择索引之前,需要根据实际查询来确定具体需要的索引类型。
以下是一些常见的索引类型:- 唯一索引:能够保证表中的每个行都有一个唯一的索引值。
- 主键索引:能够唯一标识表中的每一行,通常用来确保数据的完整性。
- 辅助索引:用于非唯一或非主键列上的查询,这些列通常是用于过滤或排序的列。
b. 索引的设计当需要创建索引时,需要考虑创建哪些列的索引。
以下是一些常见的考虑点:- 频繁查询的列:对于经常用于查询的列,需要考虑创建索引来提升查询性能。
- 外键列:为外键列创建索引可以大大提升关联查询的性能。
- 过滤、排序和分组的列:对于这些列,也需要考虑是否需要创建索引。
2. 优化SQL语句在查询优化的过程中,SQL语句的优化也非常重要。
以下是一些优化SQL语句的技巧:a. 避免使用*查询使用*查询会查找整个表,包括可能不需要的列。
这样会增加查询的开销。
因此,在查询中最好只查询需要的列。
b. 使用合适的操作符在查询中使用适当的操作符可以提高查询的效率。
使用等于操作符时,可以使用IN操作符代替,同时可以使用BETWEEN操作符来代替大量的等于操作符。
c. 避免在WHERE子句中使用表达式在WHERE子句中使用表达式会导致全部扫描,从而降低查询性能。
3. 使用视图视图是从一个或多个表中选择数据的虚拟表。
视图可以简化复杂的查询,使查询更加容易。
使用视图的好处是可以将一些计算转移到查询之前,从而降低了查询的成本。
Oracle数据库中的查询优化技巧

Oracle数据库中的查询优化技巧在Oracle数据库中,查询是最为常见的操作之一。
然而,查询的效率受多种因素影响,如数据量、索引、数据类型、查询语句的复杂度等。
为了提高查询效率,我们需要利用一些查询优化技巧。
本文将介绍一些常见的Oracle数据库中的查询优化技巧,从而让查询更加高效。
一、使用索引索引是提高查询效率的重要工具。
Oracle数据库支持多种索引类型,如B-Tree索引、位图索引、函数索引等。
在使用索引时,需要注意以下几点:1. 确定索引列在确定索引列时,需要考虑到查询的条件和频率。
通常选择经常被查询条件所使用的列,并且列的基数越大,使用索引的效果越好。
2. 索引列排序索引列的排序方式对查询效率影响很大。
如果查询语句中使用到的列和索引列完全一致,并且查询条件为“=”或“in”,那么使用升序索引或降序索引都可以。
但是如果查询条件中包含“>”、“>=”、“<”或“<=”等符号,就需要选择升序或降序索引来优化查询效率。
3. 索引的覆盖查询覆盖查询是指查询语句可以完全通过索引来完成,而不需要访问表的数据区域。
这种查询方式可以大大提高查询效率。
在使用索引时,需要考虑将查询语句的列列表设计成只用索引列。
如果查询语句需要访问表的数据区域,就需要适当地调整查询语句的列列表,以减少查询的负担。
二、优化查询语句1.使用EXISTS和IN子句在进行复杂查询时,可能需要使用子查询来实现。
而使用EXISTS和IN子句可以避免比较大量的数据,提高查询效率。
一般来说,使用EXISTS子句比使用IN子句要快一些。
2.避免使用“SELECT *”如果查询时只需要部分列的数据,那么就应该只查询所需的列,而不是使用“SELECT *”。
这样可以避免查询多余的数据,浪费时间和系统资源。
3.使用内联视图内联视图是指在查询语句中包含子查询,提高查询效率的一种方式。
但是,内联视图的查询语句必须先于外部查询语句执行,而在查询语句中使用过多的内联视图会导致查询效率降低。
Oracle优化之执行计划解析

Oracle优化之执行计划解析执行计划是Oracle数据库中一个非常重要的概念。
它是在执行SQL语句之前由Oracle优化器生成的一种指导性的路线图,用于指导数据库引擎执行查询和更新操作。
执行计划可以帮助我们理解SQL语句的执行过程,以及找出可能存在的性能瓶颈和优化机会。
执行计划是一个树状结构,其中每个节点表示一个SQL操作,如表扫描、索引扫描、排序、连接等。
每个节点都包含了一些关键信息,如访问方法、访问对象、访问行数等。
一般而言,执行计划中的节点都按照一定的顺序执行。
例如,首先进行表扫描,然后进行索引扫描,最后进行连接操作。
执行计划中的每个节点都有一个估计的成本,该成本与执行该操作所需的时间和资源有关。
优化器会根据这些成本来选择最佳的执行计划。
要解析执行计划,我们需要关注以下几个方面:1.访问方法:执行计划中的每个节点都有一个访问方法,用于告诉数据库引擎如何获取数据。
常见的访问方法包括表扫描、索引扫描、索引范围扫描、连接等。
通过分析访问方法,我们可以了解到数据库引擎是如何获取数据的,从而找出潜在的性能问题。
2.访问对象:执行计划中的每个节点都会访问一个或多个数据库对象,如表、索引等。
通过分析访问对象,我们可以了解到数据库引擎是如何获取和处理数据的,从而找出可能存在的性能瓶颈。
3.访问行数:执行计划中的每个节点都会访问一定数量的数据行。
通过分析访问行数,我们可以了解到数据库引擎是如何处理数据的,从而找出性能优化的机会。
4.执行顺序:执行计划中的节点是按照一定的顺序执行的。
通过分析执行顺序,我们可以了解到查询的执行过程,从而找出可能存在的性能问题。
在解析执行计划时,我们可以使用多种工具和技术。
常用的工具包括SQL*Plus的AUTOTRACE功能、Oracle SQL Developer的执行计划窗口等。
这些工具可以将执行计划以图形或文本的形式展示出来,方便我们进行分析和理解。
此外,我们还可以使用一些Oracle提供的视图和函数来获取和分析执行计划的信息。
ORACLE数据库查看执行计划

ORACLE数据库查看执⾏计划基于ORACLE的应⽤系统很多性能问题,是由应⽤系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们⼀般通过查看该SQL的执⾏计划,本⽂就如何看懂执⾏计划,以及如何通过分析执⾏计划对SQL进⾏优化做相应说明。
⼀、什么是执⾏计划(explain plan)执⾏计划:⼀条查询语句在ORACLE中的执⾏过程或访问路径的描述。
⼆、如何查看执⾏计划1: 在PL/SQL下按F5查看执⾏计划。
第三⽅⼯具toad等。
很多⼈以为PL/SQL的执⾏计划只能看到基数、优化器、耗费等基本信息,其实这个可以在PL/SQL⼯具⾥⾯设置的。
可以看到很多其它信息,如下所⽰2: 在SQL*PLUS(PL/SQL的命令窗⼝和SQL窗⼝均可)下执⾏下⾯步骤SQL>EXPLAIN PLAN FORSELECT*FROM SCOTT.EMP; --要解析的SQL脚本SQL>SELECT*FROM TABLE(DBMS_XPLAN.DISPLAY);3: 在SQL*PLUS下(有些命令在PL/SQL下⽆效)执⾏如下命令:SQL>SET TIMING ON --控制显⽰执⾏时间统计数据SQL>SET AUTOTRACE ON EXPLAIN --这样设置包含执⾏计划、脚本数据输出,没有统计信息SQL>执⾏需要查看执⾏计划的SQL语句SQL>SET AUTOTRACE OFF --不⽣成AUTOTRACE报告,这是缺省模式SQL>SET AUTOTRACE ON --这样设置包含执⾏计划、统计信息、以及脚本数据输出SQL>执⾏需要查看执⾏计划的SQL语句SQL>SET AUTOTRACE OFFSQL>SET AUTOTRACE TRACEONLY --这样设置会有执⾏计划、统计信息,不会有脚本数据输出SQL>执⾏需要查看执⾏计划的SQL语句SQL>SET AUTOTRACE TRACEONLY STAT --这样设置只包含有统计信息SQL>执⾏需要查看执⾏计划的SQL语句SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]参考⽂档:SQLPlus User’s Guide and Reference Release 11.1注意:PL/SQL Developer ⼯具并不完全⽀持所有的SQL*Plus命令,像SET AUTOTRACE ON 就如此,在PL/SQL Developer⼯具下执⾏此命令会报错SQL> SET AUTOTRACE ON;Cannot SET AUTOTRACE4:SQL_TRACE可以作为参数在全局启⽤,也可以通过命令形式在具体SESSION启⽤4.1 在全局启⽤,在参数⽂件(pfile/spfile)中指定SQL_TRACE =true,在全局启⽤SQL_TRACE时会导致所有进程活动被跟踪,包括后台进程以及⽤户进程,通常会导致⽐较严重的性能问题,所以在⽣产环境要谨慎使⽤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--改变oracle执行计划
2009.04.25 张磊
目录
• 优化的目标 • 认识优化的环境 • 基于规则的优化程序
• • 基于成本的优化程序 优化模式的选择
• Oracle表的连接及调整 • 嵌套循环连接
• • • 哈希连接 合并连接 跟表连接相关的hints
• 索引 • 实例
100 200 300 400
..
100 101 .. 200 .. 300 .. 400 ..
• 优势
• • • • 1,对于非等值连接,效果较高, 2,如果关联列上都有索引,效果更好; 3,如果两个row source都比较大,本方法要稍好于NL; 4,如果返回的row source过大则又会导致过多的IO。
•
•
Oracle表的连接方式及调整
• 排序合并连接(merge join)的执行方式
• • • 1,先生成驱动数据,然后对这些数据按照连接操作关联列进行排序; 2,生成被探查数据,然后对这些数据按照连接操作关联列进行排序; 3,对已经排序的两个结果放在一起执行合并操作。 .
1 2
• 缺点
• • 排序是一个费时、费资源的操作,特别对于大表。 基于这个原因,SMJ经常不是一个特别有效的连接方法,
认识优化的环境
• 基于成本的优化(CBO)
• • 从oracle7.3开始, oracle引入CBO. 它是看sql语句执行的代价来选择执行语法树的. 这里的代价主要指CPU和内存. 优化器在判断是否用某种执行方式时, 主要参照的是表及索引的统计信息. 统计信息 存储在oracle的动态性能试图中, 记录了表的大小, 有多少行, 每行的长度等信息. 这些 信息起初在库内是没有的. 需要定期对表对象和索引对象执行analyze后才出现. 很多的 时候过期统计信息会令优化器做出一个错误的执行计划. SQL> desc dba_tables; Name Default Comments ------------------------- -----------TABLE_NAME Name of the table NUM_ROWS The number of rows in the table BLOCKS The number of used blocks in the table EMPTY_BLOCKS The number of empty (never used) blocks in the table AVG_SPACE The average available free space in the table AVG_ROW_LEN The average row length, including row overhead NUM_FREELIST_BLOCKS The number of blocks on the freelist
优化的目标
• 什么是优化
• • 简单点说就是增加吞吐量,减少响应时间, 是一种利用已经证实过的方法, 反复试验/判断和实现优化方案的循序渐进的过程. 也 就是说优化很多情况下要依靠我们对数据库的已有认识. 但这种认识未必是正确的.
• 为什么要优化
• • • • 系统在设计之初没有对应用的可靠理解; 系统经过初始编码之后都对设计做过大的变动; 随着数据量的增加,原来的索引性能下降; 数据的分布不再均匀
Oracle表的连接方式及调整
• 嵌套循环连接(nested loop)的执行方式
• • • 1、 Oracle首先选择一张表作为连接的驱动表 2、 逐条提取驱动表中符合条件的记录,与被驱动表的连接列进行关联查询符合条件的 记录. Nested loop Outer loop Inner loop
Oracle表的连接方式及调整
• 哈希(hash join)连接
自从oracke 7.3以来,oracle提供了一种新的join技术,就是hash join。Hash Join只 能用于相等连接,且只能在CBO优化器模式下。相对于nested loop join,hash join更 适合处理大型结果集。Hash join不需要在驱动表上存在索引。
• •
• 优化模式的设置
优化模式 rule choose first_rows all_rows 修改initsid.ora设置 optimizer_mode= rule/choose/first_rows/ all_rows alter session set optimizer_mode =rule/choose/first_ro ws/all_rows instance session sql /*+ rule */ /*+ choose */ /*+ first_rows */ /*+ all_rows */
• • 表示对表t1、t2关联时采用嵌套循环连接。 select /*+ use_nl(dpi,psj)*/ dpi.model_name,psj.day_sale from dw.d_product_info dpi, dw.pm_stock_sale_jyb psj where dpi.product_id = psj.product_id
B0 0,0,10,1 0 √
B1 1,1,1,1,1 1
B2 2,2, 2
B 3 3
B 4 4
B5 5
B 6 6
B 7 7
B 8 8
B9 9,9, 9
√
√ √
S5
S6 S7 S8
5
NUL L NUL L 8,8,8, 8
√
√
S9
NUL L
Oracle表的连接方式及调整
• 哈希(hash join)连接步骤
hash join的要求和优势
• • • 哈希连接比较适用于返回大数据量结果集的连接。 使用哈希连接必须是在CBO模式下,参数hash_join_enabled设置为true, 哈希连接只适用于等值连接
跟表连接相关的hints
• • • • • 测试环境 数据库版本: oracle9.2.8.0 系统环境 :aix 数据库实例:BI 查询代码
• 规则1(强规则)
• oracle在建立执行树时,其关联数序是按照表在from后面出现的顺序按照倒叙排列的, 这一点似乎正确.至少,大部分情况下,在from后面最后出现的表一般会作为第一个驱动表. 但这不是绝对的,
• 规则2(弱规则)
• • oracle为了避免更大的结果和另外一个未知(没执行analyze对表进行分析)大小的结果进 行嵌套循环连接,会按照扫描表,扫描索引然后访问表,直接访问索引可以得到数据.这样 的顺序对表进行关联. 比如说,如果一个sql查询语句中,需要对表进行acess full,那么其顺序肯定是靠前的,而 相对于可以直接在index中获得所有的结果, TABLE ACCESS BY INDEX ROWID的表 顺序也比较靠前.在这之后才会考虑表在from后面出现的位置
• Hash join 原理
• • • • • 考虑以下两个数据集, 假设hash函数为求余函数。 S={1,1,1,3,3,4,4,4,4,5,8,8,8,8,10} B={0,0,1,1,1,1,2,2,2, 3,4,5,6,7,8,9,9,9,10,10,11}
分 区 值 S0 S1 S2 S3 S4 10 1,1,1 Null 3,3 4,4,4, 4
• use_merge(t1,t2)
• • 表示对表t1、t2关联时采用排序合并连接。 select /*+ use_merge(dpi,psj)*/ dpi.model_name,psj.day_sale from dw.d_product_info dpi, dw.pm_stock_sale_jyb psj where dpi.product_id = psj.product_id
• • • • • • • • • •
认识优化的环境
• 优化模式的选择
• • • Oracle的优化模式有四种: Rule: 基于规则的方式; Choose: 默认情况下oracle使用的方式. 指的是当一个表或索引有统计信息,则走cbo的 方式, 如果表或索引没有统计信息, 表又不是特别的小, 而且相应的列有索引时, 那么走 rbo方式. First rows: 与choose方式类似, 不同处在于它将以最快的方式返回查询的最先的几行. All rows: 也就是所谓的cbo模式.
select dpi.model_name,psj.day_sale from dw.d_product_info dpi, dw.pm_stock_sale_jyb psj where dpi.product_id = psj.product_id;
•
跟表连接相关的hints
• use_nl(t1,t2)
考虑查询 select * from t1,t2 where t1.f1 = t2.f1
Oracle表的连接方式及调整
• 驱动表和被探查表的概念
• 驱动表又称为外层表(outer table),这个概念用于嵌套与hash连接中,如果驱动 表row source返回较多的行数据,则对所有的后续操作都有负面的影响,因为将大的 row source作为驱动表时在后续的操作中返回的中间结果都比较大。这是比较容易理解 的。 另外在驱动表的选择上,应该选择经限制条件选择之后结果集比较小的row source 作为驱动表,而不是单纯选择原始数据较小的数据表作为driving table。 驱动表的识别,在执行计划那个,靠上的那个row source应该是驱动表,一般都是 在from关键字后靠前位置的表。
1、 构建阶段:优化器首先选择一张小表做为驱动表,运用哈希函数对连接列进行计算 产生一张哈希表。通常这个步骤是在内存(hash_area_size)里面进行的,因此运算 很快。 2、 探测阶段:优化器对被驱动表的连接列运用同样的哈希函数计算得到的结果与前面 形成的哈希表进行探测返回符合条件的记录。这个阶段中如果被驱动表的连接列的值 没有与驱动表连接列的值相等的话,那么这些记录将会被丢弃而不进行探测