Instru????o CREATE INDEX

A instru????o CREATE INDEX cria um ??ndice em uma tabela. Os ??ndices podem incluir uma ou mais colunas da tabela.

Sintaxe

CREATE [UNIQUE] INDEX nome-do-??ndice
ON nome-da-tabela ( nome-de-coluna-simples [ ASC | DESC ]
    [ , nome-de-coluna-simples [ ASC | DESC ]] * )

No Derby, o n??mero m??ximo de colunas para chave do ??ndice ?? 16.

O nome do ??ndice n??o pode ter mais que 128 caracteres.

O nome da coluna n??o pode aparecer mais de uma vez na mesma instru????o CREATE INDEX. Entretanto, ??ndices diferentes podem incluir a mesma coluna.

O Derby pode utilizar os ??ndices para melhorar o desempenho das instru????es de manipula????o de dados (consulte o Ajuste do Derby). Al??m disso, os ??ndices UNIQUE fornecem uma maneira de verificar a integridade dos dados.

Os nomes dos ??ndices s??o ??nicos no esquema (Alguns sistemas de banco de dados permitem que tabelas diferentes no mesmo esquema possuam ??ndices com o mesmo nome, mas o Derby n??o permite). ?? assumido que a tabela e o ??ndice est??o no mesmo esquema, se o nome do esquema for especificado para um dos nomes, mas n??o para o outro. Se o nome do esquema for especificado tanto para o ??ndice quanto para a tabela, ser?? lan??ada uma exce????o se os nomes dos esquemas n??o forem o mesmo. Se n??o for especificado o nome do esquema nem para a tabela e nem para o ??ndice, ser?? utilizado o esquema corrente.

O Derby utiliza, por padr??o, a ordem ascendente de cada coluna para criar o ??ndice. Especificar ASC ap??s o nome da coluna n??o modifica o comportamento padr??o. A palavra chave DESC ap??s o nome da coluna faz com que o Derby utilize a ordem descendente da coluna para criar o ??ndice. Utilizar a ordem descendente para uma coluna pode ajudar a melhorar o desempenho dos comandos que requerem resultados em uma ordem de classifica????o mista ou na ordem descendente, e para os comandos que selecionam o valor m??nimo ou m??ximo de uma coluna indexada.

Se for especificado um nome de ??ndice qualificado, o nome do esquema n??o poder?? come??ar por SYS.

??ndices e restri????es

As restri????es de unicidade, de chave prim??ria, e de chave estrangeira, geram ??ndices que imp??em, ou "apoiam", a restri????o (por isso, algumas vezes s??o chamados de ??ndices de apoio). Se uma coluna, ou conjunto de colunas, tiver uma restri????o UNIQUE ou PRIMARY KEY aplicada, n??o ser?? permitido criar ??ndice com estas colunas. O Derby j?? ter?? criado um ??ndice com nome gerado pelo sistema. Os nomes gerados pelo sistema para os ??ndices que apoiam as restri????es s??o facilmente encontrados consultando as tabelas do sistema, se for especificado o nome da restri????o. Por exemplo, para descobrir o nome do ??ndice que apoia a restri????o PK_V??OS:

SELECT CONGLOMERATENAME FROM SYS.SYSCONGLOMERATES,
SYS.SYSCONSTRAINTS WHERE
SYS.SYSCONGLOMERATES.TABLEID = SYSCONSTRAINTS.TABLEID
AND CONSTRAINTNAME = 'PK_V??OS'
CREATE INDEX ??NDICE_ORIGEM ON V??OS(AEROPORTO_ORIGEM);

-- valores monet??rios s??o geralmente ordenados do maior para o menor,
-- portanto o ??ndice ?? criado na ordem descendente

CREATE INDEX PAG_DESC ON SAMP.EMPREGADOS (SAL??RIO);

-- utilizar um tamanho de p??gina maior para o ??ndice

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize','8192');
CREATE INDEX IDX_VENDAS ON SAMP.VENDAS (VENDAS);
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize',NULL);

Tamanho da p??gina e comprimento da chave

Nota: Em um ??ndice, o tamanho das colunas chave deve ser igual ou menor que a metade do tamanho da p??gina. Se o comprimento das colunas chave, de uma linha existente na tabela, for maior que a metade do tamanho da p??gina do ??ndice, a cria????o do ??ndice para a tabela com estas colunas chave falhar??. Este erro somente ocorre ao criar o ??ndice, quando uma linha existente na tabela n??o respeita este crit??rio. Ap??s o ??ndice ser criado, as inser????es falham se o tamanho da chave associada n??o respeitar este crit??rio.

Sistema de depend??ncia de instru????es

As instru????es preparadas envolvendo SELECT, INSERT, UPDATE, UPDATE WHERE CURRENT, DELETE e DELETE WHERE CURRENT na tabela referenciada pela instru????o CREATE INDEX s??o invalidadas quando o ??ndice ?? criado. Os cursores abertos nas tabelas n??o s??o afetados.

Refer??ncias relacionadas
Instru????o CREATE FUNCTION
Instru????o CREATE PROCEDURE
Instru????o CREATE SCHEMA
Instru????o CREATE SYNONYM
Instru????o CREATE TABLE
Instru????o CREATE TRIGGER
Instru????o CREATE VIEW