CREATE INDEX [ ALLBASE/SQL Reference Manual ] MPE/iX 5.5 Documentation
ALLBASE/SQL Reference Manual
CREATE INDEX
The CREATE INDEX statement creates an index on one or more columns of a
table and assigns a name to the new index.
Scope
ISQL or Application Programs
SQL Syntax
CREATE [UNIQUE] [CLUSTERING] INDEX [Owner.]IndexName ON
[Owner.]TableName ( {ColumnName [ASC ]} [,...] )
{ [DESC]}
Parameters
UNIQUE prohibits duplicates in the index. If UNIQUE is
specified, each possible combination of index key
column values can occur in only one row of the
table. If UNIQUE is omitted, duplicate values
are allowed. Because all null values are
equivalent, a unique index allows only one row
with a null value in an indexed column. When you
create a unique index, all existing rows must
have unique values in the indexed column(s).
CLUSTERING can increase the efficiency of sequential
processing.
If CLUSTERING is specified, rows added to the
table after the index is created are placed
physically near other rows with similar key
values whenever space is available in the page.
If CLUSTERING is omitted, the key values in a
newly inserted row do not necessarily have any
relationship with the row's physical placement in
the database.
No more than one index for a table can have the
CLUSTERING attribute.
If the table was declared to use a HASH
structure, no clustering indexes may be defined
upon it. See the CREATE TABLE statement for
information on HASH structures.
[Owner.]IndexName is the name to be assigned to the new index. A
table cannot have two indexes with the same name.
If the owner is specified, it must be the same as
the owner of the table. The default owner name
is the owner name of the table it is being
defined on. The usual default owner rules do not
apply here.
[Owner.]TableName designates the table for which an index is to be
created.
ColumnName is the name of a column to be used as an index
key. You can specify up to 16 columns in order
from major index key to minor index key. The
data type of the column cannot be a LONG data
type.
ASC | DESC specifies the order of the index to be either
ascending or descending, respectively. The
default is ascending. Specifying DESC does not
create a descending index. It is the same index
as ascending. Therefore, SELECT statements that
require data to be retrieved in descending order
must specify ORDER BY columnID DESC.
Description
[REV BEG]
* If the table does not contain any rows, the CREATE INDEX statement
enters the definition of the index in the system catalog and
allocates a root page for it. If the table has rows, the CREATE
INDEX statement enters the definition in the system catalog and
builds an index on the existing data.[REV END]
If the UNIQUE option is specified and the table already contains
rows having duplicate values in the index key columns, the CREATE
INDEX statement is rejected.
The CLUSTERING option does not affect the physical placement of
rows that are already in the table when the CREATE INDEX statement
is issued.
* The new index is maintained automatically by ALLBASE/SQL until the
index is deleted by a DROP INDEX statement or until the table it
is associated with is dropped.
* The following equation determines the maximum key size for a
B-tree or hash index:
(NumberOfIndexColumns + 2)*2 + SumKeyLengths + 8 <= 1024
If the index contains only one column, the maximum length that
column can be is 1010 bytes. At compile time, SumKeyLengths is
computed assuming columns of NULL and VARCHAR columns contain no
data. At run time, the actual data lengths are assumed.
At most 16 columns are allowed in a user-defined index.
* Indexes cannot be created for views, including the system views
and pseudotables.
* Index entries are sorted in ascending order. Null compares higher
than other values for sorting.
* An index is automatically stored in the same DBEFileSet as its
table.
* The CREATE INDEX statement can invalidate stored sections. Refer
to the ALLBASE/SQL Database Administration Guide for additional
information on section validation.
* The CREATE INDEX statement allocates file space for sorting under
any available TempSpace location, or in the default sort space.
The default sort space is in the current logon group and account.
After the index has been created, this file space is deallocated.
* Indexes created with the CREATE INDEX statement are not associated
with referential or unique constraints in any manner, and are not
used to support any constraints. So a unique index created with
the CREATE INDEX statement cannot be referenced as a primary key
in a referential constraint.
Authorization
You can issue this statement if you have INDEX or OWNER authority for the
table or if you have DBA authority.
Example
This unique index ensures that all part numbers are unique.
CREATE UNIQUE INDEX PurchDB.PartNumIndex
ON PurchDB.Parts (PartNumber)
This clustering index causes rows for order items associated with one
order to be stored physically close together.
CREATE CLUSTERING INDEX OrderItemIndex
ON PurchDB.OrderItems (OrderNumber)
MPE/iX 5.5 Documentation