A instrução CREATE INDEX cria um Ãndice em uma tabela. Os Ãndices podem incluir uma ou mais colunas da tabela.
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.
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);
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.