Join Methods 连接方法
(page 110)
If there are multiple tables in your query, after the optimizer determines the access methods most
appropriate for each of the tables, the next step is to determine the way the tables can best be joined
together and the proper order in which to join them. Anytime you have multiple tables in the FROM
clause, you will have a join. Tables relationships are defined with a condition in the WHERE clause. If no
condition is specified, the join will be implicitly defined such that each row in one table will be
matched with every row in the other table. This is called a Cartesian join and I will discuss it in further
detail later in this section.
如果在你的查询中使用了多张表,在优化器确定每张表最佳的访问方法之后,下一步就是确定用何种方式能最佳的把表连接在一起而且顺序恰当。任何时候,若你在
FORM子句中有多张表,你就要连接。表之间的关系由WHERE子句条件确定。如果指定了条件,连接就被隐式的定义了,如在一张表中的每一行将匹配另一张表中的每一行。这就是所谓的笛卡尔连接,我将在本节之后进一步详细讨论。
Joins occur between pairs of tables or row sources. When multiple tables exist in the FROM clause,
the optimizer will determine which join operation is most efficient for each pair. The join methods
are: nested loops joins, hash joins, sort-merge joins, and Cartesian joins. Each join method has
specific conditions to which it is best suited. For each pair, the optimizer must also determine the order
in which the tables are joined. Figure 3-6 shows a diagram of how a query with four tables might be
joined.
连接发生在表对或者行源之间。当多张表存在于FORM子句中,优化器将确定哪种连接操作是每对表的最效率的操作。连接方法有:嵌套循环连接,哈希连接,排序-合并连接,和笛卡尔连接。每个连接方法都有其最适合的特定条件。而每对连接,优化器还必须确定表的连接顺序。图3-6展示了一个带有四张表的查询如何连接的示意图。
Notice that after the first pair of tables is joined, the next table is joined to the resulting row source
from the first join. After that join is made, the next table is joined to that row source. This continues
until all tables have been joined.
注意在第一对表连接之后,下一张表连接的是来至第一次连接的结果行源。在这次连接之后,下一表连接到(本次的)行源上。如此继续下去直到所有的表都连接到为止。
Each join method will have two children. The first table accessed is typically called the driving
table and the second table is called the inner or driven-to table. The optimizer determines the driving
table by using the statistics and the filter conditions in the WHERE clause to calculate how many rows
will be returned from each table.
The table with the smallest estimated size (in terms of blocks, rows,
and bytes) will typically be the driving table.
This is true particularly if the optimizer can determine
that one of the tables will return at most one row based on a UNIQUE or PRIMARY KEY constraint. These tables are placed first in the join. Tables with outer join operators (which I’ll discuss later) must come after the table to which it is joined.
Other than these two specific cases, the join order of the other tables is evaluated based on their computed selectivities based on the optimizer’s calculations using available table, column, and index statistics.
每个连接方法都有两个孩子。访问的第一张表通常称之为驱动表,而第二张表称之为内部或者被驱动表。优化器使用统计信息和WHERE子句中的过滤条件计算从每张表将返回多少行以确定驱动表。
具有最小评估大小值(根据块,行和字节)的表通常就是驱动表。
特别是若优化器能确定其中的一张表,基于UNIQUE或者
PRIMARY
KEY约束,最多只返回一行记录时,这就会成真。这些(驱动)表将置于第一次连接中。带有外连接操作符的表(我将之后讨论)必须放在连接过的表之后(最后连接)。
除了这两种特别情况,其它表的连接顺序将根据它们计算的选择性值来评估,选择性值是基于优化器使用有效的表、列和索引统计信息的计算(得来的)。
Figure 3-6. Join order example diagram 连接顺序示意图
- 大小: 8.7 KB
分享到:
相关推荐
flink-sql-connector-oracle-cdc 2.5-SNAPSHOT
《Pro Oracle SQL》是Oracle数据库查询的一本权威指南,Chapter 5主要探讨了与数据相关的问题,特别是关于NULL值的处理。在Oracle SQL中,NULL是一个特殊的值,表示未知或缺失的信息,它与任何其他值都不相等,包括...
Practical Guide for Oracle SQL,T-SQL and MySQL 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...
《Pro Oracle SQL》是Oracle数据库查询优化的一本权威著作,其中第三章着重讲解了全面扫描(Full Scan Access Methods)这一重要的访问方法。在数据库查询优化中,了解并掌握不同的访问方法对于提高SQL查询性能至关...
oracle 10g在fedora 7安装所需的软件
3. **JDBC测试**:通过JDBC连接器,JMeter可以连接到各种类型的数据库,如MySQL、Oracle、SQL Server等,执行SQL查询并测试数据库的读写性能,分析查询响应时间和事务处理能力。 4. **负载测试与压力测试**:JMeter...
《Pro Oracle SQL》一书的第10章深入探讨了SQL优化,特别是10.2节,重点关注如何测试执行计划,这是SQL性能调优的关键环节。在这个部分,作者旨在帮助读者理解如何有效地评估和改进SQL查询的性能,以提高数据库系统...
《Pro Oracle SQL》是Oracle数据库查询优化的经典之作,其中Chapter 3深入探讨了SQL查询的执行机制。在3.1.4章节中,主要讲解了全扫描(Full Scans)和高水线标记(Highwater Mark)的概念及其对查询性能的影响。这...
《Pro Oracle SQL》是Oracle数据库查询的一本权威指南,其中第二章主要讲解SQL查询的高级技巧。在2.8节“子查询展开(Subquery Unnesting)”中,我们将会深入探讨Oracle SQL中一种优化查询性能的重要策略。这一部分...
《Pro Oracle SQL》一书的第七章第7.8节主要探讨了如何通过GROUPING_ID()函数来扩展Oracle SQL报告的功能。GROUPING_ID()在数据分析和报表生成中扮演着重要角色,尤其在处理分组数据时,能提供更详细的分组信息。本...
《Pro Oracle SQL》是Oracle数据库查询的一本权威指南,其中Chapter 9深入探讨了SQL查询的各种高级技巧。在9.11章节中,主要讲解了Subquery Factoring,也被称为Common Table Expression(CTE),这是一个非常实用且...
9-3运行结果.sql和9-3.sql很可能是本章节的示例代码及其执行后的结果。在实际学习过程中,理解并动手运行这些示例对于掌握Model子句的用法至关重要。通过运行这些脚本,我们可以看到如何定义规则,以及这些规则如何...
《Pro Oracle SQL》是Oracle数据库查询的一本权威指南,其中Chapter 7着重讲解了SQL查询中的聚合函数与分组操作。在7.10 GROUP BY Restrictions这一部分,作者深入探讨了在使用GROUP BY子句时的一些限制和注意事项,...
《Pro Oracle SQL》一书的第9章,重点关注了使用"Model"子句进行性能调优的方法。在Oracle数据库中,Model子句是一种强大的功能,它允许数据建模和复杂的计算,尤其适用于解决多步骤计算问题,如模拟、预测和序列...
Oracle Hyperion Chapter 3 - Rules and Calculation
《Squirrel-SQL 3.3:一款强大的SQL客户端工具》 Squirrel-SQL是一款备受赞誉的SQL客户端软件,尤其在数据库管理和开发领域,它以其高效、易用和跨平台的特性深受用户喜爱。该软件是由Java语言编写,这意味着无论是...
Chapter 5 - Oracle and PL/SQL Chapter 6 - Triggers Chapter 7 - Indirect Privilege Escalation Chapter 8 - Defeating Virtual Private Databases Chapter 9 - Attacking Oracle PL/SQL Web ...
oracle 10g在fedora 7安装所需的软件
《Pro Oracle SQL》是Oracle数据库查询优化的经典之作,第六章主要聚焦在Execution Plans(执行计划)上,这是数据库查询性能优化的关键。本章节的第四部分深入探讨了如何理解和解析执行计划,以及它对SQL性能的影响...
cx_Oracle-5.1.2-11g.win-amd64-py3.3.msi orcle11g,64位资源