`

索引 CREATE INDEX

    博客分类:
  • sql
 
阅读更多
B-树 数据结构

CREATE INDEX -- 定义一个新索引
Synopsis
CREATE [ UNIQUE ] INDEX name ON table [ USING method ]
    ( { column | ( expression ) } [ opclass ] [, ...] )
    [ TABLESPACE tablespace ]
    [ WHERE predicate ]描述
CREATE INDEX 在指定的表上构造一个名为 index_name 的索引。索引主要用来提高数据库性能。但是如果不恰当的使用将导致性能的下降。

索引的键字字段是以字段名的方式声明的,或者是可选的写在一个圆括弧里面的表达式。 如果索引方式支持多个字段索引,那么我们也可以声明多个字段。

一个索引字段可以是一个使用表的行的一个或多个字段的数值进行计算的表达式。 整个特性可用于获取对基本数据某种变形的快速访问。 比如,一个在 upper(col) 上的函数索引将允许子句 WHERE upper(col) = 'JIM' 使用索引。

PostgreSQL 为从索引提供 B-tree,R-tree,hash(散列) 和 GiST 索引方法。 B-tree 索引方法是一个 Lehman-Yao 高并发 B-trees 的实 现。R-tree 索引方法用 Guttman 的二次分裂算法实现了标准的 R-trees。 hash(散列)索引方法是 Litwin 的线性散列的一个实现。 用户也可以定义它们自己的索引方法,但这个工作相当复杂。

如果出现了 WHERE 子句,则创建一个部分索引。 部分索引是一个只包含表的一部分记录的索引,通常是该表中比其它部分数据更有用的部分。 比如,如果你有一个表,里面包含已上账和未上账的定单, 未上账的定单只占表的一小部分而且这部分是最常用的部分, 那么你就可以通过只在这个部分创建一个索引来改善性能。 另外一个可能的用途是用 WHERE 和 UNIQUE 强制一个表的某个子集的唯一性。 参阅 Section 11.7 探讨更多信息。

在 WHERE 子句里用的表达式只能引用下层表的字段,但是它可以使用所有字段,而不仅仅是被索引的字段。 目前,子查询和聚集表达式也不能出现在WHERE里。

索引定义里的所有函数和操作符都必须是immutable,(不变的)也就是说, 它们的结果必须只能依赖于它们的输入参数,而决不能依赖任何外部的影响(比如另外一个表的内容或者当前时间)。 这个约束确保该索引的行为是定义完整的。要在一个索引上使用用户定义函数,请记住在你创建它的时候把它标记为immutable的函数。

参数

UNIQUE
令系统检测当索引创建时(如果数据已经存在)和每次添加数据时表中是否有重复值。 如果插入或更新的值会导致重复的记录时将生成一个错误。

name
要创建的索引名。这里不能包含模式名; 索引总是在同一个模式中作为其父表创建的。

table
要索引的表名(可能有模式修饰)。

method
用于索引的方法的名字。可选的名字是 btree, hash,rtree,和 gist。缺省方法是 btree。

column
表的列/字段名。

expression
一个基于该表的一个或多个字段的表达式。 这个表达式通常必须带着圆括弧包围写出,如语法中显示那样。 不过,如果表达式有函数调用的形式,那么圆括弧可以省略。

opclass
一个关联的操作符表。参阅下文获取细节。

tablespace
创建索引所在的表空间。如果没有声明,则使用 default_tablespace 的表空间, 如果 default_tablespace 是空字串,则使用数据库的缺省表空间。

predicate
为一个部分索引定义约束表达式。

注意
参阅 Chapter 11 获取有关何时使用索引,何时不使用索引, 以及它们哪种情况下是有用的信息。

目前,只有 B-tree 和 gist 索引方法支持多字段索引。 缺省时最多可以声明 32 个键字(这个限制可以在制作 PostgreSQL 时修改)。 目前只有 B-tree 支持唯一索引。

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

使用 DROP INDEX 删除一个索引。

缺省时索引不会用于 IS NULL 子句。这种场合下使用索引的最好方法是用 IS NULL 谓词创建一个部分索引。

例子
在表films上的 title字段创建一个 B-tree 索引:

CREATE UNIQUE INDEX title_idx ON films (title);
在表 films 的字段 code 上创建一个索引, 并且让索引存在于表空间 indexspace上:

CREATE INDEX code_idx ON films(code) TABLESPACE indexspace;
兼容性
CREATE INDEX 是 PostgreSQL 语言扩展。 在 SQL92 中没有 CREATE INDEX 命令。

分享到:
评论

相关推荐

    MySQL 创建索引(Create Index)的方法和语法结构及例子

    CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,…) [index_type] index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {...

    MySQL数据库:创建索引.pptx

    使用CREATE INDEX语句可以在一个已有表上创建索引,一个表可以创建多个索引。 语法格式: CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: UNIQUE:表示创建的是唯一性索引 ...

    oracle 语句

    create index 索引名 on 表名(列名) create index book_bid_idx on book(bid); create index abc on student(sid,sname); create index abc1 on student(sname,sid);他们是不同的 2、查看索引 select index_type,...

    数据库 使用索引提高查询效率.ppt

    - 使用T-SQL语句创建索引:例如,创建唯一聚集索引CREATE UNIQUE CLUSTERED INDEX,创建非聚集索引CREATE INDEX,以及创建组合索引。 通过索引,数据库查询性能得以提升,但同时也要注意,过度使用索引可能导致写...

    Sql Server 数据库视图 索引等

    CREATE UNIQUE CLUSTERED INDEX ix_名字 ON 表名 (字段名); ``` **索引的维护:** - **重建索引:** ```sql DBCC DBREINDEX('表名', 'ix_名字'); ``` - **删除索引:** ```sql DROP INDEX 表名.ix_名字; ``` ...

    sql server 索引的使用

    --创建索引create index(索引关键字) indexName(索引名) on userInfo(userName,userAge) create index indexName on userInfo(userName,userAge) --查看索引 sp_helpindex userInfo --创建唯一性索引 create unique ...

    《Oracle_全文索引_详细介绍》_40页.pdf

    CREATE INDEX mytext_idx ON mytext(thetext) INDEXTYPE IS CTXSYS.CONTEXT; -- 发出contains查询 SELECT id FROM mytext WHERE CONTAINS(thetext, 'near(Oracle, Corporation, 10)') > 0; -- 查询含有单词'Oracle...

    MySQL索引:提升数据检索速度的加速器

    CREATE UNIQUE INDEX idx_email ON Employees(email) WHERE email IS NOT NULL; -- 使用索引进行查询 SELECT * FROM Employees WHERE lastName = 'Smith'; ``` 在这个例子中,我们首先创建了一个包含员工信息的表`...

    数据库管理系统-C++课设

    代码已在Linux平台下调测通过,windows平台请自行参考 目前的功能没有查询,需要查询结果的可以在 Interpreter 中添加相应的查询接口。...create index 索引名 on 表名 (列名); 删除索引 drop index 索引名;

    图书管理系统数据库设计-MYSQL实现说课材料.docx

    CREATE INDEX index_sid_bid_r ON return_table (stu_id ASC, book_id ASC); -- 为ticket表的stu_id和book_id创建多列索引 CREATE INDEX index_sid_bid ON ticket (stu_id ASC, book_id ASC); ``` 以上SQL语句展示...

    C++课设小型数据库管理系统

    代码已在Linux平台下调测通过,...create index 索引名 on 表名 (列名); 删除索引 drop index 索引名; 选择语句 drop table 表名; 或者 select * from 表名 where 条件 ; 插入语句 insert into 表名 values ( 值1

    OracleOracle

    - **CREATE INDEX**:用于创建索引,提高查询性能。 - **ON 表名 (列名)**:指定在哪个表上的哪一列上创建索引。 - **[TABLESPACE 存储空间]**:可选参数,指定索引使用的存储空间。 #### 示例 ```sql -- 创建一个...

    实验四用SQL语句创建SQLServer2000数据库和表.[收集].pdf

    CREATE INDEX语句用于创建一个新的索引。例如,CREATE INDEX idx_Sno ON Student(Sno)。 三、实验内容 1. 创建学生-课程数据库 创建一个名为S_T的数据库,然后在S_T数据库中创建三个表:Student、Course和SC。 2...

    第十六章表、图层与工作空间.pdf

    Create Index 语句为表创建索引,Create Map 语句使表可以显示在地图窗口中,但不能打开地图窗口,若要打开地图窗口应该用 Map 语句。 创建表 例如,创建一个 DBF 类型的新表 Towns。 Create Table Towns ( ...

    图书管理系统数据库设计MYSQL实现样本.docx

    ### 图书管理系统数据库设计知识点详解 ...CREATE INDEX index_book_record ON book (book_record ASC); ``` 通过以上设计,可以确保图书管理系统的数据库具有较高的性能和可靠性,满足日常管理和用户服务的需求。

    mysql-数据库实验二-详解及答案.docx

    - 使用 `CREATE INDEX` 语句为 `STUDENT` 表的 `SNAME` 字段创建降序索引。 - 使用同样的命令为 `SC` 表的 `GRADE` 字段创建升序索引。 5. **删除索引**: - 使用 `DROP INDEX` 或 `ALTER TABLE ... DROP INDEX`...

    分区索引,本地索引,全局索引的区别

    根据索引是否与表的分区策略相匹配,分区索引可以分为两大类:本地索引(Local Index)和全局索引(Global Index)。 #### 二、本地索引(Local Index) 本地索引是一种特殊的分区索引,它与表的分区紧密相关,即索引的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    主要包括select, update, insert, alter, index, delete, all其中all包括所有权限。  授予实体权限 用法:grant 实体权限1[,实体权限2]… on 表名 to用户名1[,用户名2]…. 例子:  实体权限回收 用法:revoke ...

    创建数据库语句的编写

    CREATE INDEX idxname ON tabname (col....); ``` 删除操作包括: ```sql -- 删除表 DROP TABLE tabname; -- 删除列 -- 在DB2中,列一旦添加无法删除,但可以修改varchar类型的长度 -- ALTER TABLE tabname DROP ...

Global site tag (gtag.js) - Google Analytics