PostgreSQL's explain analyze made readable

Result: LpFv

# exclusive inclusive rows x rows loops node
1. 0.000 0.000 ↓ 0.0

Hash Join (cost=425646.03..865660.02 rows=3081317 width=24) Hash Cond: (transaction_land_registry.property_id = property_land_registry.id) -> Hash Join (cost=135313.29..495881.82 rows=3081317 width=24) Hash Cond: (transaction_land_registry.location_id = location.id) -> Seq Scan on transaction_land_registry (cost=0.00..200659.37 rows=9392537 width=12) -> Hash (cost=128577.08..128577.08 rows=366897 width=20) -> Hash Join (cost=87496.48..128577.08 rows=366897 width=20) Hash Cond: (location.geocode_id = geocode.id) -> Seq Scan on location (cost=0.00..24510.84 rows=1118384 width=8) -> Hash (cost=72157.08..72157.08 rows=835472 width=20) -> Seq Scan on geocode (cost=0.00..72157.08 rows=835472 width=20) Filter: ((latitude <= '53.494875'::double precision) AND (latitude >= '51.494875'::double precision) AND (longitude <= '2.202689'::double precision) AND (longitude >= '-2.202689'::double precision)) -> Hash (cost=142296.44..142296.44 rows=9023144 width=8) -> Seq Scan on property_land_registry (cost=0.00..142,296.44 rows=9,023,144 width=8) (actual rows= loops=)