Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

350
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!