CREATE INDEX
CREATE INDEX define um novo índice. No Aurora DSQL, a criação do índice é sempre assíncrona e, portanto, você deve especificar a palavra-chave ASYNC. Para obter informações sobre como o Aurora DSQL executa compilações de índice assíncronas e como monitorá-las, consulte Índices assíncronos no Aurora DSQL.
Sintaxe compatível
CREATE [ UNIQUE ] INDEX ASYNC [ [ IF NOT EXISTS ] name ] ON table_name ( { column_name | ( expression ) } [ NULLS { FIRST | LAST } ] [, ...] ) [ INCLUDE ( column_name [, ...] ) ] [ NULLS [ NOT ] DISTINCT ] [ WHERE predicate ]
Descrição
CREATE INDEX constrói um índice nas colunas especificadas da tabela especificada. Os índices são usados principalmente para melhorar o desempenho do banco de dados, embora o uso inadequado possa resultar em um desempenho mais lento.
Você especifica os campos-chave do índice como nomes de coluna ou, como alternativa, como expressões escritas entre parênteses. É possível especificar vários campos para criar um índice de várias colunas.
Um campo de índice pode ser uma expressão calculada a partir dos valores de uma ou mais colunas da linha da tabela. Use esse recurso para obter acesso rápido aos dados com base em alguma transformação dos dados básicos. Por exemplo, você pode criar um índice em upper(col), para que uma consulta com a condição WHERE upper(col) = 'JIM' possa usar esse índice.
Todos os operadores e funções usados em uma definição de índice devem ser imutáveis. Ou seja, os resultados devem depender apenas de argumentos e nunca de alguma influência externa, como o conteúdo de outra tabela ou a hora atual. Essa restrição garante que o comportamento do índice seja bem definido. Para usar uma função definida pelo usuário em uma expressão de índice, lembre-se de marcar a função IMMUTABLE ao criá-la. Se você alterar a definição da função determinada pelo usuário usada por uma expressão de índice, descarte e reconstrua o índice.
A cláusula WHERE opcional define um índice parcial. Um índice parcial contém entradas apenas para as linhas da tabela que atendem ao predicado, em vez de incluir todas as linhas. Quando as consultas frequentemente têm como alvo um subconjunto bem definido das linhas de uma tabela, você pode melhorar a performance criando um índice somente nessa parte da tabela. Por exemplo, uma tabela pode conter registros ativos e arquivados. Se as consultas normalmente acessam somente os ativos, você pode indexar somente as linhas ativas.
Parâmetros
UNIQUE-
Faz com que o sistema verifique se há valores duplicados na tabela ao criar o índice, se os dados já existirem e sempre que você adicionar dados. Tentativas de inserir ou atualizar dados que resultariam em entradas duplicadas gerarão um erro.
IF NOT EXISTS-
Não gera um erro se já houver uma relação com o mesmo nome. Um aviso é emitido nesse caso. Não há garantia de que o índice existente seja semelhante ao que seria criado. O nome do índice é obrigatório quando
IF NOT EXISTSé especificado. INCLUDE-
A cláusula opcional
INCLUDEespecifica uma lista de colunas a serem incluídas no índice como colunas não chave. Não é possível usar uma coluna não chave em uma qualificação de pesquisa de verificação de índice, e o Aurora DSQL a ignora para fins de alguma restrição de exclusividade ou exclusão imposta pelo índice. No entanto, uma verificação somente de índice pode retornar o conteúdo de colunas que não são chave sem precisar visitar a tabela do índice, pois elas estão disponíveis diretamente na entrada do índice. Assim, a adição de colunas que não são chave permite verificações somente de índice para consultas que, de outra forma, não poderiam usá-las.Não há suporte para expressões como colunas incluídas porque elas não podem ser usadas em verificações somente de índice.
name-
O nome do índice a ser criado. Não é possível incluir um nome de esquema aqui. O Aurora DSQL sempre cria o índice no mesmo esquema da tabela principal. O nome do índice deve ser diferente do nome de qualquer outra relação, como tabela, sequência, índice ou visualização, no esquema. Se você omitir o nome, o Aurora DSQL escolherá um nome adequado com base no nome da tabela principal e nos nomes das colunas indexadas.
table_name-
O nome, opcionalmente qualificado para o esquema, da tabela a ser indexada.
column_name-
O nome de uma coluna da tabela.
expression-
Uma expressão baseada em uma ou mais colunas da tabela. Normalmente, você deve escrever a expressão entre parênteses, conforme mostrado na sintaxe. No entanto, você pode omitir os parênteses se a expressão tiver a forma de uma chamada de função.
NULLS FIRST-
Especifica que os valores nulos sejam classificados antes dos não nulos.
NULLS LAST-
Especifica que os valores nulos sejam classificados depois dos não nulos.
NULLS DISTINCTNULLS NOT DISTINCT-
Especifica se os valores nulos são considerados distintos, ou seja, não iguais, para um índice exclusivo. O padrão é que eles sejam diferentes, de modo que um índice exclusivo pode conter vários valores nulos em uma coluna.
WHEREPredicado-
A cláusula
WHEREopcional especifica uma expressão booliana, ou predicado, que define um índice parcial. O índice inclui somente as linhas para as quais o predicado é avaliado como true. O predicado pode fazer referência a qualquer coluna da tabela, não apenas às colunas que estão sendo indexadas. Assim como nas expressões de índice, o predicado deve conter somente funções, operadores e referências de coluna imutáveis.O Aurora DSQL pode usar um índice parcial para uma consulta somente quando consegue comprovar que as condições
WHEREda consulta implicam o predicado do índice. Caso contrário, o Aurora DSQL não usa o índice para essa consulta.
Exemplos
Para criar um índice exclusivo na coluna title na tabela films.
CREATE UNIQUE INDEX ASYNC title_idx ON films (title);
Para criar um índice exclusivo na coluna title com colunas incluídas director e rating na tabela films.
CREATE UNIQUE INDEX ASYNC title_idx ON films (title) INCLUDE (director, rating);
Para criar um índice na expressão lower(title), o que permite realizar pesquisas eficientes sem distinção entre maiúsculas e minúsculas.
CREATE INDEX ASYNC ON films ((lower(title)));
Esse exemplo omite o nome do índice, então o Aurora DSQL escolhe um nome, normalmente films_lower_idx.
Para criar um índice com uma ordem de classificação não padrão de valores nulos.
CREATE INDEX ASYNC title_idx_nulls_low ON films (title NULLS FIRST);
Para criar um índice parcial em title nesses índices, somente as linhas em que rating é maior que 5:
CREATE INDEX ASYNC high_rating_idx ON films (title) WHERE rating > 5;