Firebird数据库
Firebird数据库语言参考-索引
2016-05-31 15:55:27

 

索引是一个数据库对象,用于一个表更快的数据检索或加快查询的排序。索引也用于强制执行参考完整性约PRIMARY KEY, FOREIGN KEY 和UNIQUE。

 

本节描述如何创建索引,激活和停用,删除他们,收集统计信息(重新计算选择性)。


创建索引CREATE INDEX

 

作用: 为一个表创建一个索引.

 

用于: DSQL, ESQL

 

语法:

 

       CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]
       INDEX indexname ON tablename
          {(col [, col …]) | COMPUTED BY (<expression>)};

 

表 5.10. CREATE INDEX语句参数

 

CREATE INDEX语句为一个表创建一个索引。它可以被用来加速搜索、排序和分组。索引在定义约束过程中能被自动创建,如主键、外键或唯一约束。

 

索引可以基于除了 BLOB 和数组数据类型之外的任何列的内容。索引名称(标识符)必须是唯一的,在所有索引名称中。

键索引

 

当一个主键、外键或唯一约束被增加一个表或一个列时,没有来自设计者的明确指令,具有相同名称的索引被自动创建.例如,当执行且提交下面的语句时,PK_COUNTRY索引将自动被创建:

 

        ALTER TABLE COUNTRY ADD CONSTRAINT PK_COUNTRY
               PRIMARY KEY (ID);

 

 

在索引创建语句中指定关键字UNIQUE创建一个索引,整个表将被强制执行唯一性。该索引被称为一个"唯一索引"。唯一的索引并不是一个约束。惟一的索引不能包含重复的键值(在复合的情况下,或重复键值的组合,或多列,或多段)索引。按照SQL99标准在单段和多段的索此中重复的NULL值被允许。

 

 

所有索引在Firebird数据库中是无方向的.一个索引可能被构建从最低值到最高值(升序排列)或从最高值到最低值(降序排列)。关键字ASC[ENDING]和DESC[ENDING] 用于指定索引的方向.默认的索引排序是ASC[ENDING],它是十分有效的,在同一列或同一键集合上定义的升序和降序的索引。

 

 

 

某些限制适用于索引。

在索引中的键的最大长度仅限于页面大小的 ¼。

 

 

可容纳每个表的索引的数目是有限的。特定表实际的最大值索引数取决于页面大小和索引中的列数。

 

表 5.11.每个表的最大索引数

 

最大索引的字符串长度为 9 个字节小于最大键长度。可索引的最大值字符串长度取决于页面大小和字符集。

表 5.12. 最大可索引的(VAR)CHAR长度


只有表的所有者和管理员有权使用CREATE INDEX.

 


1.在 SALARY_HISTORY 表中为列UPDATER_ID创建索引

      CREATE INDEX IDX_UPDATER
              ON SALARY_HISTORY (UPDATER_ID);

2.在SALARY_HISTORY表为CHANGE_DATE列创建降序排序索引。

       CREATE DESCENDING INDEX IDX_CHANGE
              ON SALARY_HISTORY (CHANGE_DATE);

3. 在SALES表中为ORDER_STATUS, PAID创建一个多段索引

       CREATE INDEX IDX_SALESTAT
                ON SALES (ORDER_STATUS, PAID);

4. 在COUNTRY表中为NAME列创建一个不允许副本值的索引

        CREATE UNIQUE INDEX UNQ_COUNTRY_NAME
                 ON COUNTRY (NAME);

5. 为PERSONS创建一个计算索引
        CREATE INDEX IDX_NAME_UPPER ON PERSONS
                 COMPUTED BY (UPPER (NAME));

     像这样的索引可以用于不区分大小写的搜索:

        SELECT *
        FROM PERSONS
        WHERE UPPER(NAME) STARTING WITH UPPER('Iv');

 

参阅: ALTER INDEX, DROP INDEX