[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 数据库 > 其它 > 正文
PostgreSQL7.0手册-用户手册-19. SQL命令-CREATE INDEX
编译:何伟平 laser@zhengmai.com.cn (2001-04-21 21:48:45)

CREATE INDEX
名称
CREATE INDEX — 构建一个从索引 

语法
CREATE [ UNIQUE ] INDEX index_name ON table
    [ USING acc_name ] ( column [ ops_name ] [, ...] )
CREATE [ UNIQUE ] INDEX index_name ON table
    [ USING acc_name ] ( func_name( column [, ... ]) [ ops_name ] )
输入
UNIQUE 
令系统检测当索引创建时(如果数据已经存在)和每次添加数据时表中是否有重复值.如果插入或更新的值回导致重复的记录时将导致一个错误. 
index_name 
要创建的索引名. 
table 
要索引的表名. 
acc_name 
用于索引的访问模式.缺省访问模式是 BTREE.Postgres 提供三种用于从索引的访问模式: 
BTREE 
一个 Lehman-Yao 高度并发 btrees 的实现. 
RTREE 
用 Guttman 二分法做的标准 rtrees 的实现. 
HASH 
一个Litwin 线性哈希(散列)法的实现. 
column 
表的列/字段名. 
ops_name 
一个关联的操作符表.参阅下文获取细节。 
func_name 
用户定义的函数,其返回值可被索引.
输出
CREATE 
索引成功创建的返回信息. 
ERROR: Cannot create index: 'index_name' already exists. 
如果不能创建索引,返回此信息. 

描述
CREATE INDEX 在指定的表 table 上构建一个名为 index_name 的索引. 
小技巧: 索引主要用来提高数据库性能.但是如果不恰当的使用将导致性能的下降.
在上面第一个语法里,索引的键字以列/字段名声明.如果索引的访问模式支持多列索引,我们也可以声明多个字段. 
在上面显示的第二种语法中,索引是以用户定义的函数 func_name 的结果定义的,该函数应用于一个表的一个或多个字段.这些函数索引可用于获取更快的数据访问速度,尤其在这些数据的操作是基于一些需要做一定转换才能用于基本数据的操作符时. 

Postgres 为从索引提供 btree,rtree 和 hash(散列)访问模式。btree 访问模式是一个 Lehman-Yao 高并发 btrees 的实现。rtree 访问模式用 Guttman 的二分算法实现了标准的 rtrees。hash(散列)访问模式是 Litwin 的线性散列的一个实现。我们单独的列出这些所用的算法是要表明所有这些访问模式都是完全动态的并且不必进行周期性的优化(例如,象静态散列算法常见的那样)。 

使用 DROP INDEX 删除一个索引. 

注意
当一个索引了的字段涉及到使用: <,<=,=,>=,> 之一进行比较时, Postgres 的查询优化器将考虑在扫描中使用 btree 索引。 
当一个索引了的字段涉及到使用: <<,&<,&>,>>,@,~=,&& 之一进行比较时,Postgres 的查询优化器将考虑在扫描中使用 rtree 索引。 

当一个索引了的字段涉及到使用 = 进行比较时,Postgres 的查询优化器将考虑在扫描中使用散列(hash)索引。 

目前,只有 BTREE 访问模式支持多字段索引。缺省时最多可以声明 16 个键字(这个限制可以在制作 Postgres 时修改). 

可以为索引的每个列/字段声明一个操作符表.操作符表标识将要被该索引用于该列/字段的操作符.例如,一个4-字节整数的 btree 索引将使用int4_ops 表;这个操作符表包括4-字节整数的比较函数.实际上,该域的数据类型的缺省操作符表一般就足够了.某些数据类型有操作符表的原因是,它们可能有多于一个的有意义的顺序.例如,我们对复数类型排序时有可能以绝对值或者以实数部分.我们可以通过为该数据类型定义两个操作符表,然后在建立索引的时候选择合适的表来实现.还有些操作符表有特殊的用途: 

操作符表 box_ops 和 bigbox_ops 都支持对 box 数据类型的  rtree 索引.两者的区别是 bigbox_ops 把方形的坐标按比例缩小,以避免在对非常大的浮点数坐标做乘法,加法和减法时出现浮点例外。如果你的方形所在的范围的大小是 20,000 单位的平面或更大,你应该用 bigbox_ops。 
int24_ops 操作符表在为 int2 类型的数据构建索引并且与查询资格条件里的 int4 数据做比较时很有用。类似的,int42_ops 支持对要和查询里的 int2 数据做比较的 int4 数据进行索引。

下面的查询显示所有已定义的操作符表: 
SELECT am.amname AS acc_name,
       opc.opcname AS ops_name,
       opr.oprname AS ops_comp
    FROM pg_am am, pg_amop amop,
         pg_opclass opc, pg_operator opr
    WHERE amop.amopid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY acc_name, ops_name, ops_comp
用法
在表 films 上的 title 字段创建一个 btree 索引: 
CREATE UNIQUE INDEX title_idx
    ON films (title);
兼容性
SQL92
CREATE INDEX 是 Postgres 语言扩展.
在 SQL92 中没有 CREATE INDEX 命令. 
(http://www.fanqiang.com)
    进入【UNIX论坛

相关文章
PostgreSQL7.0手册-用户手册-19. SQL命令-VACUUM (2001-04-21 22:16:33)
PostgreSQL7.0手册-用户手册-19. SQL命令-UPDATE (2001-04-21 22:16:12)
PostgreSQL7.0手册-用户手册-19. SQL命令-UNLISTEN (2001-04-21 22:15:44)
PostgreSQL7.0手册-用户手册-19. SQL命令-TRUNCATE (2001-04-21 22:15:24)
PostgreSQL7.0手册-用户手册-19. SQL命令-SHOW (2001-04-21 22:15:01)
PostgreSQL7.0手册-用户手册-19. SQL命令-SET (2001-04-21 22:14:42)
PostgreSQL7.0手册-用户手册-19. SQL命令-SELECT INTO (2001-04-21 22:14:19)
PostgreSQL7.0手册-用户手册-19. SQL命令-SELECT (2001-04-21 22:14:01)
PostgreSQL7.0手册-用户手册-19. SQL命令-ROLLBACK (2001-04-21 22:13:41)
PostgreSQL7.0手册-用户手册-19. SQL命令-REVOKE (2001-04-21 22:13:18)

===更多相关===
 

★  樊强制作 欢迎分享  ★