Descripción del problema
Después de agregar datos nuevos a una tabla o actualizar los existentes, se presenta latencia y no es posible obtener la información más reciente al ejecutar sentencias SQL.
Causa posible
Al crear un índice de búsqueda para una tabla de datos, el motor SQL selecciona automáticamente dicho índice para consultar la información si este contiene todas las columnas involucradas en la sentencia SQL ejecutada. Para obtener más información, consulte Index selection policy.
Los datos del índice de búsqueda pueden presentar latencia de sincronización. Por lo tanto, es posible que no se obtenga la información más reciente tras ejecutar las sentencias SQL, incluso si los datos ya se escribieron en la tabla.
Solución
-
Especifique explícitamente que no se usen índices de búsqueda de forma prioritaria
Al consultar datos mediante sentencias SQL, incluya el comando
use index()en las sentencias para indicar de manera explícita que no se deben usar índices de búsqueda de forma prioritaria.Por ejemplo, suponga que una tabla llamada
exampletablecontiene las columnaspk,nameycontext, y que se creó un índice de búsqueda que incluye dichas columnas. Ejecute la siguiente sentencia SQL de ejemplo, en la cual no se especifica ningún índice de búsqueda, para consultar los datos:SELECT pk,name,context FROM exampletable use index(); -- Specify that search indexes are not preferentially used when you query data from the data table. -
Use operaciones de lectura de datos para realizar consultas
Si necesita leer datos con base en la clave principal, utilice operaciones de lectura de datos. Tablestore ofrece la operación GetRow para leer una sola fila, así como operaciones como BatchGetRow y GetRange para leer varias filas en lote. Para obtener más información, consulte Read data.
Operación
Descripción
Escenario
Lee datos de una sola fila según la clave principal especificada.
Adecuada cuando se conocen los valores de todas las columnas de clave principal de la fila por leer y el volumen de filas es pequeño.
Lee varias filas de datos de una o más tablas simultáneamente.
Recomendada cuando se conocen los valores de todas las columnas de clave principal de las filas por leer, el volumen de filas es grande o se requiere leer datos de varias tablas.
Lee datos cuyos valores de clave principal se encuentran dentro de un rango específico.
Útil cuando se conoce el rango de valores de clave principal o el prefijo de dichos valores correspondientes a las filas por leer.
-
Utilice un índice secundario
ImportanteEl uso de la función de índice secundario genera cargos por almacenamiento. Al escribir datos en una tabla, se consumen recursos de cómputo para crear el índice de búsqueda y leer la información.
Puede emplear un índice secundario para consultar datos mediante sentencias SQL. Siga estos pasos:
-
Cree un índice secundario para la tabla de datos. Para obtener más información, consulte Use secondary indexes in the Tablestore console.
Se recomienda crear un índice secundario local para cumplir con los requisitos de coherencia fuerte.
-
Ejecute sentencias SQL para consultar datos con base en un índice secundario mediante uno de los siguientes métodos:
Por ejemplo, suponga que una tabla llamada
exampletablecontiene las columnaspk,nameycontext, y que se creó un índice secundario llamadoexampletable_indexpara dicha tabla, el cual incluye las columnas mencionadas.-
Método 1: Especifique explícitamente un índice secundario para consultar datos de una tabla
Si no especifica un índice de forma explícita al ejecutar una sentencia SQL, Tablestore determina automáticamente si debe usarlo según la directiva de selección de índices.
Ejecute la siguiente sentencia SQL de ejemplo, donde se especifica explícitamente un índice secundario mediante el comando
use index(), para consultar los datos:SELECT pk,name,context FROM exampletable use index(exampletable_index); -- Explicitly specify that a secondary index is used to query data from a data table. -
Método 2: Consulte datos mediante una tabla de asignación creada para un índice secundario
Ejecute la sentencia
CREATE TABLEpara crear una tabla de asignación llamadaexampletable_indexpara el índice secundario. Para obtener más información, consulte Create a mapping table for a table.-
Ejecute la siguiente sentencia SQL
SELECTde ejemplo para consultar datos mediante la tabla de asignación creada para el índice secundario:SELECT pk,name,context FROM exampletable_index; -- Query data by using the mapping table that is created for the secondary index.
-
-