Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

358
Visualizações
El índice Gist en PostgreSQL solo funciona en orden, pero no en el predicado de dónde

Tengo una tabla simple con la columna LatLon que contiene un punto con la ubicación del objeto en el espacio con el índice GiST creado en esta columna:

 create table "Machine" ( "MachineId" integer not null, "Name" text, "Description" text default ''::text, "LatLon" point default point((0)::double precision, (0)::double precision) not null ); create index on "Machine" using gist("LatLon");

Tengo una consulta sobre la selección de solo puntos a cierta distancia del punto con coordenadas fijas:

 select * from "Machine" where "LatLon" <-> point(25.123456789,-60.123456789) < 100;

Aunque la explicación en dicha consulta muestra que el índice no se está utilizando durante la ejecución:

 Seq Scan on "Machine" (cost=0.00..244762.46 rows=1753121 width=208) Filter: (("LatLon" <-> '(25.123456789,-60.123456789)'::point) < '100'::double precision) Rows Removed by Filter: 5259364

Al mismo tiempo, ejecutar una order by consulta contra la columna LatLon muestra que el índice funciona perfectamente:

 select * from "Machine" order by "LatLon" <-> point(25.123456789,-60.123456789);
 Index Scan using "Machine_LatLon_idx" on "Machine" (cost=0.41..1021907.70 rows=5259364 width=216) Order By: ("LatLon" <-> '(25.123456789,-60.123456789)'::point)

¿Por qué el índice GiST no se aplica en la instrucción where con el operador de distancia <-> ?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Porque alguien implementó uno, y no el otro.

Tenga en cuenta que esto no es simplemente un operador, y que ningún otro operador emparejado ( <-> y < , aquí) usa índices tampoco. Por lo tanto, tendría que introducir la infraestructura para admitir dichos índices, así como esta implementación específica.

Si solo desea la cosa cercana con un índice, debe llevar la distancia al punto para obtener un círculo. Entonces tienes un buen operador binario para que el índice se agarre:

 select * from "Machine" where "LatLon" <@ circle(point(25.123456789,-60.123456789),100);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda