BETWEEN_JOIN:指连接条件类似于“t1.A BETWEEN t2.B AND t2.C”的JOIN, 包括“t1.A > t2.B AND t1.A < t2.C”这样的写法,简记为“A BETWEEN B AND C”。 如下以t1.A BETWEEN t2.B AND t2.C 进行说明。 1. 优化原理: 将(B,C)理解为一条条线段, “A BETWEEN B AND C”即为找出与A 相交的所 有线段。 图5- 9 “A BETWEEN B AND C”的处理逻辑如下图所示 可以先将(B[key], C)排序,如上图所示,然后扫描t1 表,对于任意value A, 用二分法找到对应的位置pos, pos 满足“B(pos) <= A < B(pos + 1)”, 如上图中 为2,对于该pos 及前面的所有数据,再进行“A between B and C”的check, 即需要check(0,1,2)。 为了提升check 的性能,在sort buffer 中加入index,如下图所示, index 为指 向与当前区间有重叠的上一个区间的位置(图中向上的箭头)。找到对应的 位置pos 后,只需check 由index 组成的list 即可。例如图中的情况,对应的 A 只需check(2,0)即可。 图5- 10 Index 示意图如下: 2. 优化特性: 利用智能索引进行过滤的过程如下图所示, 如果阴影所示部分与(A,B)所构成