2015-01-14 6 views
0

У меня есть база данных с двумя таблицами, областями и свойствами, состоящая из 1 миллиона строк. Теперь мы обнаруживаем, сколько свойств лежат в пределах данной области, мы используем этот запрос, но это требует времени для извлеченияST_Intersects Время для получения результата

SELECT count(*) FROM properties 
WHERE ST_Intersects(geom, '01030000000100000005000000456458C51B375240C173EFE1922333400E10CCD1E3375240335019FF3E23334011AAD4EC81385240E4BD6A65C227334068B3EA73B5375240FA449E245D2B3340456458C51B375240C173EFE192233340') 

Есть ли лучший подход, который мы можем следовать?

План выполнения

"Aggregate (cost=38932.37..38932.38 rows=1 width=0)" 
" -> Bitmap Heap Scan on properties (cost=463.41..38921.03 rows=4533 width=0)" 
"  Recheck Cond: (geom && '01030000000100000005000000456458C51B375240C173EFE1922333400E10CCD1E3375240335019FF3E23334011AAD4EC81385240E4BD6A65C227334068B3EA73B5375240FA449E245D2B3340456458C51B375240C173EFE192233340'::geometry)" 
"  Filter: _st_intersects(geom, '01030000000100000005000000456458C51B375240C173EFE1922333400E10CCD1E3375240335019FF3E23334011AAD4EC81385240E4BD6A65C227334068B3EA73B5375240FA449E245D2B3340456458C51B375240C173EFE192233340'::geometry)" 
"    Index Cond: (geom && '01030000000100000005000000456458C51B375240C173EFE1922333400E10CCD1E3375240335019FF3E23334011AAD4EC81385240E4BD6A65C227334068B3EA73B5375240FA449E245D2B3340456458C51B375240C173EFE192233340'::geometry)" 
+0

У вас есть индекс GiST над 'geom'? – zerkms

+0

Да, есть CREATE INDEX geom_properties_idx ON свойства ИСПОЛЬЗОВАНИЕ gist (geom); – lampdev

+0

А каков план выполнения для данного запроса? – zerkms

ответ

0

Учебник ответ в том, что вы должны сначала проверить перекрытия ограничивающей коробки на каждой геометрии. Я, конечно, нашел с запросами на большом количестве геометрий в обеих таблицах, что:

select xxx from A, B 
    where A.geom && B.geom 
       AND 
      ST_INTERSECTS(a.geom,b.geom); 

... работает намного быстрее - на четыре порядка - чем только с помощью ST_INTERSECTS в одиночку.

Смежные вопросы