Spowolnienie jest prawdopodobnie spowodowane operacjami matematycznymi, a nie pobieraniem danych z tabeli. Część twoich kryteriów nie dotyczy pól rekordów, ale wyników operacji matematycznych na innych rekordach, więc staje się to O(N).
Powodem, dla którego Postgres nie używa indeksu i wybiera zamiast tego skanowanie Seq, jest to, że decyduje, że większość rekordów tabeli będzie musiała zostać pobrana podczas zapytania. Kiedy większość rekordów w tabeli ma zostać pobrana, indeksy mogą nie przynieść większych korzyści, jeśli w ogóle.
Aby przyspieszyć działanie, należy rozważyć użycie indeksów przestrzennych i wyszukiwania na podstawie otoczenia PostGis lub alternatywnie Elasticsearch z Zapytanie o odległość geograficzną .