接上篇文章和大家继续聊一下布隆过滤器(bloom Filter)在ORACLE数据库中的应用。
ORACLE数据库在以下的场景中使用到了布隆过滤器:减少并行联接中从进程之间的数据通信量。 ※1
实现连接过滤器修剪。 ※2
支持结果缓存。 ※3
※1:available from Oracle Database 10g Release 2
※2:available from Oracle Database 11g Release 1
※3:available from Oracle Database 11g Release 1,但是因为没有具体资料,没有办法进行详细叙述。如果哪位读者有详细一点的资料,欢迎补充。
关于并行联接
当两个表采用并行执行哈希(hash)或合并联接(merge join)时,需要在有多个从属进程之间交换数据集。例如,在以下查询的执行计划中,使用三组从属进程(每组从属进程拥有列 TQ 中的不同标识值)。SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.mod = 42
-------------------------------------------------------------------------
| Id | Operation | Name | TQ |IN-OUT| PQ Distrib |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | PX COORDINATOR | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10002 | Q1,02 | P->S | QC (RAND) |
|* 3 | HASH JOIN BUFFERED | | Q1,02 | PCWP | |
| 4 | PX RECEIVE | | Q1,02 | PCWP | |
| 5 | PX SEND HASH | :TQ10000 | Q1,00 | P->P | HASH |
| 6 | PX BLOCK ITERATOR | | Q1,00 | PCWC | |
|* 7 | TABLE ACCESS FULL| T1 | Q1,00 | PCWP | |
| 8 | PX R