Oracle hash join
这篇讲的是Oracle中hash join的运作原理,它被作者称为一个“非常强悍的功能”。文章没有停留在理论,而是直白地剖析了其核心流程:Oracle首先会选择一个表作为驱动表,根据过滤条件进行筛选,然后将结果集构建成一个哈希表存放在进程的PGA内存(hash area)中。接着,它再去扫描第二张表,对每一行的键值进行哈希运算,并到内存的哈希表中去“探测”,命中则返回数据,否则丢弃。 但文章的重点不止于此。作者紧接着点出了关键现实约束:考虑到单个进程PGA内存的大小,Oracle并不会允许无限制地消耗系统内存。因此,这个看似直接的过程在Oracle内部实际上被细化为三种不同的执行模式。这恰恰解释了在不同数据规模或内存条件下,查询计划为什么会发生差异。 文章从原理讲到内存限制的现实考量,为读者勾勒出一个更立体的hash join图景,其细节对于理解数据库性能和配置背后的逻辑很有启发。