以下是部分引用《DB2数据库性能调整和优化》,对于oracle也是这三种方式,这三种方式出现在执行计划中,因此十分有必要搞清楚内在算法原理。
对于多表的join一般是采取先join2张表,然后在join下一张表。
1、NestLoops
相当于2个循环,通常是在有索引时进行。
在嵌套循环连接中,将扫描第一个(或外部)表,以查找满足查询规则的行。对于在外部表中找到的每一行,数据库服务器将在第二个(或内部)表中搜索其相应的行。是通过索引扫描还是通过表扫描来访问外部表则取决于该表。如果有过滤条件,数据库服务器首先会应用它们。(也就是说where或者on条件和join方式谁先执行不一定,如果是where后执行那么执行filter操作,如果先where那么是带条件的结果集去join)如果内部表没有索引,那么数据库服务器就会将在表上构建索引的成本与连续扫描的成本进行比较(也就是索引不见得是成本低),然后选择成本最低的那一种方法。总成本取决于连接列上是否有索引。如果连接列上有一个索引,那么其成本会相当低;否则,数据库服务器就必须对所有表(外部和内部表)执行表扫描。
2、MergeJoin
2个表都将相同的项进行分组,然后比对,扫描将跳跃进行,虽然相同项不必扫描2次了但是因为有排序所以成本很高
当连接表的连接列上没有可用索引时,通常使用该连接方法。连接开始之前,如果有过滤条件,那么数据库服务器首先会应用它们,然后对连接列上每个表中的行进行分类。一旦实现了对行的分类,连接两个表的算法就十分容易:数据库服务器仅仅连续地读取两个已分类表,并合并所有相匹配的行。因为该方法在进行表连接之前,必须将所有的连接表分类,所以其成本通常极其高。
下面是我结合其他资料,所理解的MergeJoin的过程,请大家批评指正,仿照了《HTML渲染过程》博客的风格,呵呵。具体标题忘了,
先对2表分别进行排序(正序),然后分别取出2表中的一个,两者比较,淘汰其中小的(因为是正序,小的不可能有匹配项),然后以大的为标准继续向下搜索,所以基准项会在两张表轮替。这是示意图。
3、HashJoin
先扫描小表在内存中构建出出hash值,然后对大表进行扫描。
当一个或多个连接表上没有索引时,或者当数据库服务器必须从所有连接表中读取大量行时,就使用这种方法。在该方法中,需要扫描其中的一个表,通常扫描较小的那个表,用它在内存中创建一个哈希表。通过哈希函数,将具有相同哈希值的行放在一个内存中。在扫描完第一个表并将它放在哈希表中之后,就扫描第二个表,并在哈希表中查找该表中的每一行,看是否可以进行连接。如果连接中有更多表,那么数据库服务器将对每个连接表执行相同的操作。
哈希连接包含两个动作:构建哈希(或者是我们所称的构建阶段),以及探测哈希表(或探测阶段)。在构建阶段,数据库服务器读取一个表,并在应用所有现有过滤条件之后,在内存中创建一个哈希表。可以在概念上将哈希表认为是一系列的内存bucket,每个bucket所拥有的地址是通过应用哈希函数从键值导出的。数据库服务器不会在特定的哈希bucket中对键进行分类。在探测阶段,数据库服务器将读取连接中的其他表,如果存在连接谓词,就应用它们。在满足连接谓词限定条件的每个行中,数据库服务器将对键应用哈希函数,并探测哈希表以查找匹配的键值。哈希连接通常比分类合并连接快,因为它没有涉及分类操作。
- 大小: 32.2 KB
分享到:
相关推荐
DB2数据库性能调整和优化(第2版)侧重于介绍DB2数据库的性能调优。性能调优是一个系统工程:全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源;深刻理解DB2的锁及并发机制、索引原理、数据库...
此时,DBA和开发人员可以通过手动提示、调整统计信息或优化数据库设计等方式,协助优化器更好地工作,提升数据库的整体性能。 #### 结论 DB2优化器作为数据库性能调整和优化的中枢,其重要性不容小觑。通过深入...
综上所述,DB2数据库性能调整和优化是一个涉及多方面知识的复杂过程,包括SQL优化、索引管理、内存配置、参数调优、物理设计、监控诊断以及备份恢复等。通过深入理解和实践这些技术,我们能够有效地提升DB2数据库...
db2数据库性能调整和优化,非常好的一本书,推荐给大家
《牛新庄-db2数据库性能调整优化》这本书深入探讨了DB2数据库的性能优化技术,是DB2数据库管理员和开发人员的重要参考资料。DB2作为IBM公司的一款企业级关系型数据库管理系统,广泛应用于金融、电信、制造等多个行业...
需要这本书的都知道这本书的价值 这本书是高清扫描版,不是之前网上出现过的照片版
通过以上几个方面的优化措施,可以显著提高DB2数据库的性能。需要注意的是,在进行任何优化之前,都应该充分了解系统的业务需求和运行环境,制定出符合实际情况的优化方案。同时,定期监控数据库性能指标,及时调整...
Runstats提供了两种数据分布采样方式:频率采样(Frequency)和百分比采样(Quantile)。频率采样关注最常见的数据值,而百分比采样则通过分段来估计数据分布。通常,推荐使用默认的采样设置,但针对特定场景可能...
IBM DB2数据库认证考试题库C2090-614 是属于DB2数据最高一级认证考试,认认真真把题库看上两边通过很轻松。
牛新庄的书,很经典,是学习db2的好书,全本,放心下载
根据提供的标题、描述和部分内容,我们可以总结出关于“DB2数据库调整数据库性能”的一系列关键知识点。下面将详细探讨这些知识点: ### 一、DB2数据库调整数据库性能的重要性 DB2数据库作为IBM公司的一款高性能...
IBM DB2数据库认证考试题库C2090-611涉及的知识点主要包括了DB2数据库的基本操作、故障恢复、数据保护、高性能数据库维护等方面。以下是题库中所体现的知识点详解: 1. 数据库恢复:在DB2数据库管理中,如果因为...
需要这本书的都知道这本书的价值 这本书是高清扫描版,不是之前网上出现过的照片版
DB2数据库性能分析与优化是一项系统性工作,需要结合实际情况采用多种技术和工具。通过对数据库运行快照的分析,结合SQL语句的优化,可以有效提升系统的整体性能。此外,合理的监控策略也是保证数据库长期稳定运行的...