Включите дубликаты в запросах 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 но это не сделало это.

0 ответов

Другие вопросы по тегам