With the GSI, I can now pull 20k
documents in 2s
, over a very large area like 50000km
,
This really helped me a lot from @vsr1 Appropriate index for query with unnest - #2 by vsr1
I’ve been reading a lot, and it clearly shows that the GSI is much faster than the internal spacial queries,
Now;
- I’ve put together the spacial logic in the query,
- Let’s say I have a Point A [43.65, -79.44]
- I create a
SELECT
using the geo formula against this Point A, which generates the distance between Point A and the documents in DB, asdistance
in KM
This query works
SELECT
d.env,
d.geo,
d.city,
(ACOS(SIN( RADIANS(43.65)) * SIN(RADIANS(d.geo.lat)) + COS( RADIANS(43.65)) * COS(RADIANS(d.geo.lat)) * COS(RADIANS(d.geo.lon) - RADIANS(-79.44))) * 6371) AS distance
FROM `dev` d
WHERE d.geo.lat IS NOT NULL AND d.geo.lat IS NOT MISSING
AND (ACOS(SIN( RADIANS(43.65)) * SIN(RADIANS(d.geo.lat)) + COS( RADIANS(43.65)) * COS(RADIANS(d.geo.lat)) * COS(RADIANS(d.geo.lon) - RADIANS(-79.44))) * 6371) <= 50000
ORDER BY distance DESC
LIMIT 20000;
**
This second one doesn’t work, I tried to make it cleaner like this but it fails,
**
SELECT
d.env,
d.geo,
d.city,
(ACOS(SIN( RADIANS(43.65)) * SIN(RADIANS(d.geo.lat)) + COS( RADIANS(43.65)) * COS(RADIANS(d.geo.lat)) * COS(RADIANS(d.geo.lon) - RADIANS(-79.44))) * 6371) AS distance
FROM `dev` d
WHERE d.geo.lat IS NOT NULL AND d.geo.lat IS NOT MISSING
AND distance <= 50000
ORDER BY distance DESC
LIMIT 20000;
@vsr1 - How can you make the second query work, the first query is working but I am duplicating the geo formula, both in the SELECT
clause and in the WHERE AND ... <= 50000
As you can see in the second query am trying to use distance but it breaks it and fails.