La instrucción ALTER INDEX modifica las columnas de un search index o cambia el estado de un secondary index o search index. Al importar o actualizar grandes volúmenes de datos, deshabilite el índice con ALTER INDEX para mejorar el rendimiento.
Sintaxis
alter_index_statement ::= ALTER INDEX [IF EXISTS] index_identifier
ON table_identifier
{
ADD COLUMNS '(' alter_key_expression ')'
|
alter_state_expression
}
[ASYNC]
alter_key_expression ::= index_key_definition [ (',' index_key_definition)* ]
index_key_definition ::= {
column_identifier [ DESC ]
| column_identifier'(' column_options ')'
}
alter_state_expression ::= { ACTIVE | INACTIVE | DISABLED }
Si modifica un secondary index,
ALTER INDEXsolo admite la modificación del estado del índice.Solo puede especificar propiedades para nuevas columnas cuando modifica un search index.
Compatibilidad
LindormTable admite dos tipos de índices: secondary index, search index . La siguiente tabla describe la compatibilidad de cada tipo de índice con las cláusulas de la instrucción ALTER INDEX.
|
Elemento de sintaxis |
Secondary index |
Search index |
|
✖️ |
〇 |
|
|
〇 |
〇 |
Uso
Agregar columnas
No es posible agregar columnas a un secondary index.
Puede agregar una o más columnas y especificar propiedades de clave de índice para las nuevas columnas. Por ejemplo, ADD COLUMNS(c1,c3,p1(type=text,analyzer=ik)) agrega tres columnas de índice: c1, c3 y p1, y especifica que la columna p1 utiliza el analizador ik. Para obtener más información sobre las propiedades de clave de índice disponibles, consulte Search index key properties (option_definition).
alter_state_expression
Puede establecer el estado del índice en uno de los siguientes valores:
Parámetro | Descripción |
ACTIVE | El índice está disponible y se puede utilizar en consultas. |
INACTIVE | El índice no está disponible y el optimizador de consultas lo ignora, pero continúa recibiendo actualizaciones de datos de la tabla base. |
DISABLED | El índice está deshabilitado, el optimizador de consultas lo ignora y ya no recibe actualizaciones de datos de la tabla base. Importante Cambiar el estado de un secondary index directamente de |
Ejemplos
Las siguientes instrucciones crean la tabla base y los índices utilizados en los ejemplos:
-- Create a base table.
CREATE TABLE test (
p1 VARCHAR NOT NULL,
p2 INTEGER NOT NULL,
c1 BIGINT,
c2 DOUBLE,
c3 VARCHAR,
c4 TIMESTAMP,
PRIMARY KEY(p1, p2)
) WITH (CONSISTENCY = 'strong', MUTABILITY='MUTABLE_LATEST');
-- Create a secondary index named idx1.
CREATE INDEX idx1 ON test(c1 desc) include(c3,c4) WITH (COMPRESSION='ZSTD');
-- Create a search index named idx2.
CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(p1, p2, c2);
Deshabilitar un índice
Deshabilite el índice idx1.
ALTER INDEX idx1 ON test DISABLED;
Comprobar el resultado
Ejecute la instrucción SHOW INDEX FROM test; para consultar el resultado.
Habilitar un índice
ALTER INDEX IF EXISTS idx1 ON test ACTIVE;
Comprobar el resultado
Ejecute la instrucción SHOW INDEX FROM test; para consultar el estado del índice.
Agregar columnas a un search index
Agregue las columnas c1 y c3 al search index idx2 y especifique las propiedades de clave de índice para la columna c3.
ALTER INDEX IF EXISTS idx2 ON test ADD COLUMNS(c1,c3(type=text,analyzer=ik));
Los datos históricos no se sincronizan automáticamente con las columnas de índice recién agregadas. Debe reconstruir el índice para incluir estos datos históricos. Para obtener más información, consulte Rebuild the search index.
Comprobar el resultado
Ejecute la instrucción SHOW INDEX FROM test; para consultar la columna del índice.
Reconstruir un search index
Esta acción sincroniza todos los datos de la tabla base con el search index.
-
Compilación síncrona de un search index: La instrucción
ALTER INDEXdevuelve una respuesta solo después de completar la compilación del índice.ALTER INDEX IF EXISTS idx2 ON test REBUILD; -
Compilación asíncrona de un search index: La instrucción
ALTER INDEXdevuelve una respuesta inmediatamente, independientemente de si el índice se compiló correctamente.ALTER INDEX IF EXISTS idx2 ON test REBUILD ASYNC;