DB2索引的语法是学习DB2数据库的基础知识,下面就为您详细介绍DB2索引的语法,希望可以对您学习DB2索引的语法方面有所帮助。
CREATE INDEX
CREATE INDEX 语句用来为 DB2 Everyplace 表创建索引。
调用
此语句可以在使用 DB2 CLI 函数的应用程序中使用,也可以通过 CLP 发出。
语法
>>-CREATE--INDEX--index-name--ON--table-name-------------------->
.-,-----------------------------------------.
V .-ASC--. |
>--(----+-column-name-----------------+--+------+-+--)---------><
+-UCASE--(--| expression |--)-+ '-DESC-'
'-LCASE--(--| expression |--)-'
描述
INDEX index-name
命名索引。
ON table-name
table-name 命名要对其创建索引的表。
column-name
对于索引,列名标识要作为索引键一部分的列。
每个列名都必须是标识一个表列的未限定名。使用 8 列或更少的列;不能重复列名(SQLSTATE 42711)。
每个指定列的长度一定不能超过 1024 字节。
ASC
按列以升序顺序排列索引条目。这是缺省值。
DESC
按列以降序顺序排列索引条目。
LCASE / UCASE
LCASE 或 LOWER 函数返回一个字符串,其中所有 SBCS 字符都已转换为小写字符。即,字符 A 至 Z 将转换为字符 a 至 z,而带有区分标记的字符将转换为其小写等效项(如果它们存在的话)。
自变量必须是其值为 CHAR 或 VARCHAR 数据类型的表达式。
该函数的结果的数据类型和长度属性与自变量的数据类型和长度属性相同。如果自变量可以为空,则结果可以为空;如果自变量为空,则结果为空值。
确保 EMPLOYEE 表中的列 JOB 的值中的字符将以小写字符的形式返回。例如:
SELECT LCASE(JOB)
FROM EMPLOYEE
WHERE EMPNO = '000020';
规则
对于没有主键的表,最多可创建 15 个索引。对于有主键的表,最多可创建 14 个索引。
如果尝试创建与现有索引匹配的索引,则 CREATE INDEX 语句将失败。在下列情况下,两个索引描述被认为是重复的:
索引中的列集及其顺序与现有索引的列集和顺序相同。
排序属性是相同的。
不能在 CREATE INDEX 语句中使用具有 BLOB 数据类型的列。
注意事项
CREATE INDEX 语句可包含最多 8 列。
DB2 Everyplace 支持索引的双向扫描。尽管下面两个索引的定义不同,但它们的作用是相同的。
CREATE INDEX IDX1 ON EMPLOYEE (JOB ASC)
CREATE INDEX IDX1 ON EMPLOYEE (JOB DESC)
通常,应在不指定排序方向的情况下创建索引。通常,索引越少,索引维护的成本也就越低。
DB2 Everyplace 支持索引的前缀扫描。考虑以下示例。创建了以下索引。
CREATE INDEX J1 ON T (A, B, C, D, E, F, G, K)
不需要为 T (A,B,C,D) 创建另一索引。
如果该表未包含数据,则 CREATE INDEX 创建索引的描述;在对表插入数据时创建索引条目。
要为脏位索引创建索引,请使用以下示例:
CREATE INDEX <index name>
ON <table name>
($dirty)
有关脏位的更多信息,请参阅 ***。
示例
为 EMPLOYEE 表创建名为 JOB_BY_DPT 的索引。按每个部门(WORKDEPT)中的职位(JOB)以升序顺序排列索引条目。
CREATE INDEX JOB_BY_DPT
ON EMPLOYEE (WORKDEPT, JOB)
在建表的时候可以指定索引的表空间,比如: create table tabname(...) in tabspace index in tabindexspace
【编辑推荐】