Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

354
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda