数据库服务器使用仲裁规则来定义基于多个列的非重叠分段。
图: 两个列上的非重叠分段的示例
... FRAGMENT BY EXPRESSION 0<a AND a<=10 AND b IN (‘E', ‘F', ‘G') IN dbsp1, 0<a AND a<=10 AND b IN (‘H', ‘I', ‘J') IN dbsp2, 10<a AND a<=20 AND b IN (‘E', ‘F', ‘G') IN dbsp3, 10<a AND a<=20 AND b IN (‘H', ‘I', ‘J') IN dbsp4, 20<a AND a<=30 AND b IN (‘E', ‘F', ‘G') IN dbsp5, 20<a AND a<=30 AND b IN (‘H', ‘I', ‘J') IN dbsp6;
图: 两个列上的非重叠分段的图解示例
如果您使用了这种类型的分布方案,数据库服务器可以对等式搜索消除分段,而不是对范围搜索。 由于所有 INSERT 操作和许多 UPDATE 操作可以执行等式搜索,因而此能力仍然有用。在表达式中应避免使用 REMAINDER 子句。如果使用 REMAINDER 子句,那么数据库服务器始终不能消除剩余分段。
如果使用基于单个列的表达式无法获得足够的粒度,可以接受此备选方案。