Todos los productos
Search
Centro de documentos

:SELECT

Última actualización: Sep 05, 2026

Este tema describe la sintaxis que se utiliza para consultar datos en una tabla espaciotemporal.

Sintaxis

SELECT [hint_clause] ( select_clause | '*' )
    FROM table_name
    [force index(index_name)]
    [ WHERE where_clause ]
    [ ORDER BY ordering_clause ]
    [ LIMIT integer ] | [LIMIT integer, integer]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | function_name '(' [ selector ( ',' selector )* ] ')'
                      | COUNT '(' '*' ')'
where_clause     ::=  relation ( AND|OR relation )*
                      | [st_contains] '(' [ selector ( ',' selector )* ] ')'    
relation         ::=  column_name operator term
                      '(' column_name ( ',' column_name )* ')' operator tuple_literal
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*

hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expression

Parámetros

Tenga en cuenta los siguientes puntos cuando configure parámetros en las instrucciones SELECT:

  • Si desea forzar al sistema a seleccionar un índice específico durante la ejecución de la instrucción SELECT, agregue force index(index_name) al final de la instrucción.

  • Si a LIMIT le sigue un solo número, este indica la cantidad de filas que se devolverán. Si a LIMIT le siguen dos números separados por una coma (,), el primero representa el valor de desplazamiento, es decir, cuántas filas se omitirán en la consulta. El segundo número especifica la cantidad de filas que se devolverán.

  • Para obligar al sistema a ejecutar una consulta ineficiente, agregue el hint /*+ _l_allow_filtering_ */ al final de la instrucción SELECT. Cuando LindormTable determina que una consulta SELECT es ineficiente, no la procesa de forma predeterminada y lanza una excepción para mantener estable el rendimiento. Por ejemplo, si su base de datos Lindorm almacena una tabla llamada dt y usted ejecuta la instrucción SELECT * FROM dt WHERE nonPK=100;, se devuelve el siguiente mensaje de error. Para conocer la solución a una consulta ineficiente, consulte FAQ.

    DoNotRetryIOException: Detect inefficient query: SELECT * FROM dt WHERE nonPK=100 supportEmptyResult true. This query may be a full table scan and thus may have unpredictable performance.
  • Para obtener más información sobre los hints, consulte Overview.

Ejemplos

  • Utilice funciones espaciotemporales en las instrucciones SELECT para ejecutar consultas sencillas. Para obtener más información sobre estas funciones, consulte Overview.

    SELECT id, ST_AsText(g) FROM gps_data;
    SELECT id, ST_Buffer(g, 1.0) AS buffer FROM gps_data;
  • Emplee funciones espaciotemporales en las instrucciones SELECT para ejecutar consultas sencillas. Actualmente, el sistema ejecuta de manera eficiente las instrucciones que incluyen las tres funciones siguientes como condiciones espaciales: ST_Contains, ST_DWithin y ST_DWithinSphere.

    • Incluya la función ST_Contains en la instrucción para consultar los datos correspondientes a los puntos dentro del rango espacial especificado.

      SELECT id FROM gps_data WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);
    • Agregue la función ST_DWithin a la instrucción para consultar los datos de los puntos ubicados a la distancia plana indicada desde el punto central. La distancia que se especifica en esta función se mide en grados.

      SELECT id FROM gps_data WHERE ST_DWithin(ST_GeomFromText('POINT(0 0)'), g, 100);
    • Use la función ST_DWithinSphere en la instrucción para consultar los datos de los puntos situados a la distancia esférica indicada desde el punto central. La distancia que se especifica en esta función se mide en metros.

      SELECT id FROM gps_data WHERE ST_DWithinSphere(ST_GeomFromText('POINT(0 0)'), g, 100);
  • Agregue el hint /*+ _l_allow_filtering_ */ al final de las instrucciones de consulta ineficientes para omitir la validación y ejecutarlas de forma forzosa.

    SELECT /*+ _l_allow_filtering_ */ * FROM gps_data WHERE ST_Within(g,ST_GeomFromText('POLYGON((...))'));
    Nota

    Una consulta SELECT se considera ineficiente cuando las condiciones de consulta especificadas en la instrucción SELECT cumplen todos los criterios siguientes:

    • La cláusula WHERE no especifica el rango de valores de la primera columna de clave principal de la tabla.

    • La cláusula WHERE no especifica el rango de valores de la primera columna de clave de índice de la tabla de índices.

    • Una o más condiciones de la cláusula WHERE no están relacionadas con la primera columna de clave principal ni con la primera columna de clave de índice.

Habilitar consultas paralelas

Al habilitar las consultas paralelas, mejora notablemente el rendimiento de algunas instancias de LindormTable.

Requisitos previos

Se requiere LindormTable 2.7.10.2 o una versión posterior. Esta función está deshabilitada de forma predeterminada. Para utilizarla, comuníquese con el soporte técnico de Lindorm (ID de DingTalk: s0s3eg3).

Importante

En versiones de LindormTable anteriores a la 2.7.10.2, esta función se encuentra en vista previa interna y puede consumir recursos significativos del sistema. Se recomienda upgrade the LindormTable version.

Límites

Las consultas paralelas pueden devolver resultados en un orden distinto, por lo que no son compatibles con la cláusula ORDER BY.

Uso

Una vez habilitadas las consultas paralelas, utilice hint _l_enable_parallel_ en su instrucción SQL. De este modo, el sistema determina automáticamente la cantidad óptima de consultas paralelas según la complejidad de la consulta.

SELECT /*+_l_enable_parallel_*/ * FROM dt WHERE (id > 0 AND id < 5) OR (id > 6 AND id < 15);

Consultar el rendimiento paralelo

El rendimiento paralelo varía según la consulta. Ejecute la instrucción EXPLAIN para consultar la cantidad máxima de consultas paralelas permitidas cuando los recursos del sistema son suficientes. A continuación se muestra un ejemplo de código:

EXPLAIN SELECT /*+_l_enable_parallel_*/ * FROM dt WHERE (id > 0 AND id < 5) OR (id > 6 AND id < 15);

En el resultado, ParallelScanPlan on dt by 2 ranges indica que la cantidad máxima de consultas paralelas permitidas es 2. Habilitar las consultas paralelas aumenta el rendimiento aproximadamente al doble.

Preguntas frecuentes

¿Qué es una consulta ineficiente?

Una consulta SELECT se considera ineficiente cuando las condiciones de consulta especificadas en la instrucción SELECT cumplen todos los criterios siguientes:

  • La cláusula WHERE no especifica el rango de valores de la primera columna de clave principal de la tabla.

  • La cláusula WHERE no especifica el rango de valores de la primera columna de clave de índice de la tabla de índices.

  • Una o más condiciones de la cláusula WHERE no están relacionadas con la primera columna de clave principal ni con la primera columna de clave de índice.

¿Qué debo hacer si mi consulta se identifica como ineficiente?

Utilice uno de los métodos siguientes para resolver este problema:

  • Agregue el hint /*+ _l_allow_filtering_ */ al final de la instrucción de consulta ineficiente para omitir la validación y ejecutarla de forma forzosa.

    SELECT /*+ _l_allow_filtering_ */ * FROM dt WHERE nonPK=100;
  • Agregue una o más condiciones asociadas con la clave principal de la tabla a la cláusula WHERE.

  • Modifique la clave principal de la tabla para evitar consultas ineficientes. Para obtener más información, consulte Design primary keys for Lindorm wide tables.

  • Utilice high-performance native secondary indexes.