Todos os produtos
Search
Central de documentação

:SELECT

Última atualização: Jun 28, 2026

Este tópico descreve a sintaxe de consulta de dados em uma tabela espaço-temporal.

Sintaxe

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

Observe os itens a seguir ao configurar parâmetros em instruções SELECT:

  • Para forçar o uso de um índice específico na execução da instrução SELECT, adicione force index(index_name) ao final da instrução.

  • Se LIMIT for seguido por apenas um número, esse valor definirá a quantidade de linhas retornadas. Se LIMIT for seguido por dois números separados por vírgula (,), o primeiro indicará o deslocamento (offset), ou seja, quantas linhas ignorar na consulta, e o segundo especificará o total de linhas a retornar.

  • Para forçar a execução de uma consulta ineficiente, adicione o hint /*+ _l_allow_filtering_ */ ao final da instrução SELECT. Por padrão, se o LindormTable identificar uma consulta como ineficiente, ele não a processará e lançará uma exceção para garantir a estabilidade do desempenho. Por exemplo, considere uma tabela chamada dt no banco de dados Lindorm. Ao executar a instrução SELECT * FROM dt WHERE nonPK=100;, o sistema exibirá a seguinte mensagem de erro. Para obter mais informações sobre como resolver consultas ineficientes, 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 obter mais informações sobre hints, consulte Visão geral.

Exemplos

  • Use funções espaço-temporais em instruções SELECT para realizar consultas simples. Para obter mais informações sobre funções espaço-temporais, consulte Visão geral.

    SELECT id, ST_AsText(g) FROM gps_data;
    SELECT id, ST_Buffer(g, 1.0) AS buffer FROM gps_data;
  • Use funções espaço-temporais em instruções SELECT para realizar consultas simples. Atualmente, é possível executar com eficiência instruções que utilizam as três funções a seguir como condições espaciais: ST_Contains, ST_DWithin e ST_DWithinSphere.

    • Use a função ST_Contains na instrução para consultar dados correspondentes aos pontos dentro do intervalo espacial especificado.

      SELECT id FROM gps_data WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);
    • Use a função ST_DWithin na instrução para consultar dados correspondentes aos pontos situados a uma distância plana específica do ponto central. A distância especificada na função é medida em graus.

      SELECT id FROM gps_data WHERE ST_DWithin(ST_GeomFromText('POINT(0 0)'), g, 100);
    • Use a função ST_DWithinSphere na instrução para consultar dados correspondentes aos pontos situados a uma distância esférica específica do ponto central. A distância especificada na função é medida em metros.

      SELECT id FROM gps_data WHERE ST_DWithinSphere(ST_GeomFromText('POINT(0 0)'), g, 100);
  • Adicione o hint /*+ _l_allow_filtering_ */ ao final de instruções de consulta ineficientes para ignorar a verificação e forçar a execução.

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

    Uma consulta SELECT será considerada ineficiente se as condições especificadas na instrução SELECT atenderem a todos os critérios a seguir:

    • A cláusula WHERE não especifica o intervalo de valores da primeira coluna da chave primária da tabela.

    • A cláusula WHERE não especifica o intervalo de valores da primeira coluna da chave de índice na tabela de índices.

    • Uma ou mais condições especificadas na cláusula WHERE não estão relacionadas à primeira coluna da chave primária ou à primeira coluna da chave de índice.

Ative consultas paralelas

Ative consultas paralelas pode melhorar significativamente o desempenho de consulta de algumas instâncias do LindormTable.

Pré-requisitos

Use o LindormTable versão 2.7.10.2 ou posterior. Esse recurso está desativado por padrão. Para usá-lo, entre em contato com o suporte técnico do Lindorm (ID do DingTalk: s0s3eg3).

Importante

Em versões do LindormTable anteriores à 2.7.10.2, esse recurso está em prévia interna e pode consumir recursos significativos do sistema. Recomendamos que você atualize a versão do LindormTable.

Limitações

Consultas paralelas podem retornar resultados em uma ordem diferente e não são compatíveis com a cláusula ORDER BY.

Uso

Após ativar consultas paralelas, use o _l_enable_parallel_ hint na instrução SQL. Nesse caso, o sistema determina automaticamente o número ideal de consultas paralelas com base na complexidade da consulta.

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

Visualize o desempenho paralelo

O desempenho paralelo varia conforme a consulta. Execute a instrução EXPLAIN para visualizar o número máximo de consultas paralelas permitidas quando os recursos do sistema forem suficientes. Exemplo de código:

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

No resultado, ParallelScanPlan on dt by 2 ranges indica que o número máximo de consultas paralelas permitidas é 2. Ative consultas paralelas pode aumentar o desempenho da consulta em aproximadamente duas vezes.

FAQ

O que é uma consulta ineficiente?

Uma consulta SELECT será considerada ineficiente se as condições especificadas na instrução SELECT atenderem a todos os critérios a seguir.

  • A cláusula WHERE não especifica o intervalo de valores da primeira coluna da chave primária da tabela.

  • A cláusula WHERE não especifica o intervalo de valores da primeira coluna da chave de índice na tabela de índices.

  • Uma ou mais condições especificadas na cláusula WHERE não estão relacionadas à primeira coluna da chave primária ou à primeira coluna da chave de índice.

O que fazer se minha consulta for identificada como ineficiente?

Use um dos métodos a seguir para resolver esse problema: