Подсчет количества пересекающихся геометрий
- 
				cesar
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 20 окт 2011, 19:12
- Репутация: 0
Подсчет количества пересекающихся геометрий
Понятно что есть ST_Intersects и можно найти объекты пересекающиеся с заданной геометрией. Также понятно что их можно подсчитать используя COUNT. Но если их много и запросов много то это будет не гуд совсем. Можно ли как то, более эффективно, подсчитать количество пересекающихся геометрий, может как то  через индекс не выбирая данные с таблицу COUNT ом?
			
			
									
						
										
						- Aleksandr Dezhin
- Активный участник
- Сообщения: 244
- Зарегистрирован: 03 фев 2010, 10:47
- Репутация: 14
- Откуда: Москва
Re: Подсчет количества пересекающихся геометрий
Насколько я понимаю речь о пересечении геометрий в рамках одной таблицы.
Одним запросом можно сделать как-то так:
Вместо id можно использовать и oid если они есть в таблице. В общем, смысл сравнения t1.id > t2.id в том, чтобы избежать попадания двух пар (t1, t2) и (t2, t1) а также самопересечений.
GIST-индекс в этом случае работать будет, но только на одном проходе - второй скорее всего будет выполняться через seq scan.
			
			
									
						
										
						Одним запросом можно сделать как-то так:
Код: Выделить всё
SELECT COUNT(*)
FROM tab t1, tab t2
WHERE t1.id > t2.id AND ST_Intersects(t1.geom, t2.geom)
GIST-индекс в этом случае работать будет, но только на одном проходе - второй скорее всего будет выполняться через seq scan.
- 
				cesar
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 20 окт 2011, 19:12
- Репутация: 0
Re: Подсчет количества пересекающихся геометрий
SELECT COUNT(id)
FROM tab t1
WHERE ST_Intersects(t1.geom, POLIGON )
Вот так но если таких запросов много, и если в область попадает много совпадений то то COUNT(*) работает не достаточно быстро.
			
			
									
						
										
						FROM tab t1
WHERE ST_Intersects(t1.geom, POLIGON )
Вот так но если таких запросов много, и если в область попадает много совпадений то то COUNT(*) работает не достаточно быстро.
- 
				cesar
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 20 окт 2011, 19:12
- Репутация: 0
Re: Подсчет количества пересекающихся геометрий
а по oid  быстрее будет?  вобще нету но можно организовать.
			
			
									
						
										
						- Aleksandr Dezhin
- Активный участник
- Сообщения: 244
- Зарегистрирован: 03 фев 2010, 10:47
- Репутация: 14
- Откуда: Москва
Re: Подсчет количества пересекающихся геометрий
COUNT(*) работает достаточно быстро. А вот ST_Intersects может без индекса довольно сильно тормозить. Индекс то вы создали? Если геометрии с которыми нужно проверить пересечения лежат в отдельной таблице, то опять таки можно одним запросом.
			
			
									
						
										
						- 
				cesar
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 20 окт 2011, 19:12
- Репутация: 0
Re: Подсчет количества пересекающихся геометрий
геометрия лежит в общей таблице с кучей полей, знаю что не гуд сейчас провожу на таблицах с минимальным количеством полей, индексы созданы   просто если после  ST_Intersects  надо посчитать COUNT(*)  а ST_Intersects   выдает по 50 000 совпадений и таких запросов с 10 одновременно то это медленно. 
Попробовал COUNT(oid) работает практически одинаково COUNT(id).
			
			
									
						
										
						Попробовал COUNT(oid) работает практически одинаково COUNT(id).
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей
