|
17.3. 访问方法策略amstrategies 字段的存在用于使数据类型之间的比较标准化. 例如, B-tree 对键字, 小于号到大于号施加了很严格的顺序. 因为 PostgreSQL 允许用户定义操作符,所以 PostgreSQL 不能只是看到操作符的名称 (如">" 或 "<")就认为是什么样的比较.实际上, 一些访问模式并不强加任何顺序要求. 例如, R-tree 的表达式是长方形包含关系,而一个散列 (hash)数据结构表达式只是与散列(hash)函数的结果有一些位 (bitwise)相似. PostgreSQL 需要某种连贯的方法从你的查询里取来一个资格(条件), 查看一下操作符,然后马上决定是否有一个可用的索引存在. 这意味着 PostgreSQL 需要知道类似 "<=" 和 ">" 操作符分割一个 B-tree这样的信息. PostgreSQL 使用 策略 来表达这些操作符之间的关系以及 它们可以用于扫描索引的方法. 定义一套新的策略超出了这个讨论的范畴,但是我们将分析 B-tree 策略如何工作, 因为你将需要了解这些来增加一个新的 B-tree 操作符表. 在 pg_am 表里, amstrategies 字段是为这个访问模式定义的策略数量. 对于 B-tree,这个数量是 5.这些策略对应于 这些策略的含义在 Table 17-2 中定义. 方法是你需要增加与这些策略相对应的操作符到 pg_amop 关系里去(见下面 ). 访问模式代码可以使用这些策略数(不管数据类型是什么), 来确定如何分割B-tree,计算选择性等. 先不必关心增加操作符的细节问题;只要明白我们必须有一套这样的操作符用于 int2 , int4 , oid , 和所有其他B-tree可以操作的数据类型. |