CREATE INDEX 在指定的表上构造一个名为
index_name
的索引。索引主要用来提高数据库性能。但是如果不恰当的使用将导致性能的下降。
PostgreSQL
为从索引提供 B-tree,R-tree,hash(散列) 和 GiST 索引方法。
B-tree 索引方法是一个 Lehman-Yao 高并发 B-trees 的实
现。R-tree 索引方法用 Guttman 的二次分裂算法实现了标准的 R-trees。
hash(散列)索引方法是 Litwin 的线性散列的一个实现。
用户也可以定义它们自己的索引方法,但这个工作相当复杂。
如果出现了
WHERE 子句,则创建一个
部分索引。
部分索引是一个只包含表的一部分记录的索引,通常是该表中比其它部分数据更有用的部分。
在 WHERE 子句里用的表达式只能引用下层表的字段,但是它可以使用所有字段,而不仅仅是被索引的字段。
目前,子查询和聚集表达式也不能出现在WHERE里。
索引定义里的所有函数和操作符都必须是immutable,(不变的)也就是说,
它们的结果必须只能依赖于它们的输入参数,而决不能依赖任何外部的影响(比如另外一个表的内容或者当前时间)。
这个约束确保该索引的行为是定义完整的。要在一个索引上使用用户定义函数,请记住在你创建它的时候把它标记为immutable的函数。
目前,只有 B-tree 和 gist 索引方法支持多字段索引。
缺省时最多可以声明 32 个键字(这个限制可以在制作 PostgreSQL 时修改)。
目前只有 B-tree 支持唯一索引。
可以为索引的每个列/字段声明一个
操作符表。
操作符表标识将要被该索引用于该列/字段的操作符。
例如, 一个四字节整数的 B-tree 索引将使用
int4_ops 表;
这个操作符表包括四字节整数的比较函数。 实际上,该域的数据类型的缺省操作符表一般就足够了。
某些数据类型有操作符表的原因是,它们可能有多于一个的有意义的顺序。
例如,我们对复数类型排序时有可能以绝对值或者以实部。
我们可以通过为该数据类型定义两个操作符表,然后在建立索引的时候选择合适的表来实现。
http://www.postgresql.org/docs/8.4/interactive/index.html
posted on 2009-12-22 10:00
冰是没有未来的,因为它的永恒 阅读(434)
评论(0) 编辑 收藏 所属分类:
postges database