鍍金池/ 問答/網(wǎng)絡(luò)安全/ greenplum5.3空間分析不走索引

greenplum5.3空間分析不走索引

各位大神,小弟遇到個納悶的問題請教。使用greenplum最新版本+postgis2.1.5進(jìn)行空間分析,geometry字段已建立gist索引,但是查詢時卻不走索引。同樣的數(shù)據(jù)在postgresql中是能正常走索引的,導(dǎo)致GP的性能反而比PG還低得多了。為簡化問題,設(shè)置場景如下:
兩張簡單的表做空間分析,表結(jié)構(gòu)一樣,主要就是geometry字段做疊加分析。A表和B表均有兩個字段,objectid,geom.查詢sql:select a.objectid from a,b where _ST_Intersects(a.geom,b.geom) = true 就是查詢出有相交的數(shù)據(jù)。使用分析語句,很清楚的看到在PG里面的執(zhí)行計劃是走了控件索引的:
Gather (cost=1000.28..50073671.73 rows=14816593 width=8)
Workers Planned: 6
-> Nested Loop (cost=0.28..22260691.60 rows=2469432 width=8)

     ->  Parallel Seq Scan on dltb a  (cost=0.00..492413.47 rows=425447 width=1763)
     ->  Index Scan using idx_imp on import_cd2 b  (cost=0.28..38.77 rows=2 width=1449)
           Index Cond: (a.geom && geom)
           Filter: (_st_intersects(a.geom, geom) AND (st_area(st_geographyfromtext(('SRID=4610;'::text || st_astext(st_intersection(a.geom, geom)))), true) > '1'::double precision))

(7 rows)
但是在greenplum里卻走的全表掃描:
Gather Motion 14:1 (slice2; segments: 14) (cost=0.00..8468137365.87 rows=7483140136 width=8)
-> Result (cost=0.00..8467986078.15 rows=534510010 width=8)

     Filter: (st_area(st_geographyfromtext('SRID=4610;'::text || st_astext(st_intersection(dltb.geom, import_cd2.geom))), true)) > 1::double precision
     ->  Result  (cost=0.00..8467942114.70 rows=1336275025 width=8)
           ->  Nested Loop  (cost=0.00..8467931424.50 rows=1336275025 width=1138)
                 Join Filter: _st_intersects(dltb.geom, import_cd2.geom) AND dltb.geom && import_cd2.geom
                 ->  Broadcast Motion 14:14  (slice1; segments: 14)  (cost=0.00..943.87 rows=163569 width=618)
                       ->  Table Scan on import_cd2  (cost=0.00..435.48 rows=11684 width=618)
                 ->  Table Scan on dltb  (cost=0.00..442.25 rows=28721 width=520)

Optimizer status: PQO version 2.51.0
(10 rows)
強(qiáng)制關(guān)閉順序掃描后仍然是執(zhí)行全表掃描.有哪位大神知道是什么原因么?謝謝

回答
編輯回答
陪妳哭

1, Greenplum 默認(rèn) index scan 是禁用的,打開試試。 set enable_indexscan = on;
2, 做一下 analyze
3, 禁用 seqscan 試試。 set enable_seqscan = off;
4, 換成舊的優(yōu)化器試一下。set optimizer = off;

2017年4月15日 05:19