Включите дубликаты в запросах Postgis, чтобы ускорить запрос
У меня есть запрос Postgis, который выбирает все точки в данном радиусе из местоположений.
SELECT id
FROM mytable
WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(12.1234 12.1234)'), 789)
OR ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(23.4567 23.4567)'), 789)
OR ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(34.5678 34.5678)'), 789)
Когда я анализирую это с EXPLAIN
я могу видеть
Bitmap Heap Scan on mytable (cost=964.16..1051.01 rows=1 width=4)
Recheck Cond: ((location && 'E61A301BC000002OBFUSCATEDDAT05123240'::geography) OR (location && '010020E610OBFUSCATEDDATAC9ACE4E0E3240'::geography) OR (location && '0101000OBFUSCATEDDATA8FC3042080020E613240'::geography) )
Filter: (((location && 'E61A301BC000002OBFUSCATEDDAT05123240'::geography) AND ('010020E610OBFUSCATEDDATAC9ACE4E0E3240'::geography && _st_e...SOMETHING
-> BitmapOr (cost=964.16..964.16 rows=1 width=0)
-> Bitmap Index Scan on global_points_gix (cost=0.00..4.42 rows=1 width=0)
Index Cond: (location && 'E61A301BC000002OBFUSCATEDDAT05123240'::geography)
-> Bitmap Index Scan on global_points_gix (cost=0.00..4.42 rows=1 width=0)
Index Cond: (location && '010020E610OBFUSCATEDDATAC9ACE4E0E3240'::geography)
-> Bitmap Index Scan on global_points_gix (cost=0.00..4.42 rows=1 width=0)
Index Cond: (location && '0101000020OBFUSCATEDDATA8FC3042080020E613240'::geography)
Это заставляет меня думать, что поиск точек очень быстрый, но объединение результатов для исключения дубликатов стоит дорого. Я прав? Можно ли как-то включить дубликаты, если я в порядке с ними? Я пытался заменить OR
с UNION SELECT
но это не сделало это.