Re: [Gfoss] query postgis

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

Andrea Peri
>SELECT *
>FROM A, B
>WHERE ST_INTERSECTS (A.THE_GEOM, B.THE_GEOM)
>
>che secondo me dovrebbe corrispondere a fare un intersezione con il plugin
>di Geoprocessing (Qgis).
>
>Se la mia ipotesi è giusta, la cosa che trovo strana è che la query impiega
>circa 20 minuti per restituirmi il risultato (le due tabelle sono piuttosto
>voluminose) mentre l'intersezione fatta da qgis ci mette un paio di minuti.

La query che esegui dice a postgis di restituire tutti e sottolineo tutti gli elementi che tra loro si intersecano.

Se per sfortuna i tuoi due archivi sono molto sovrapponibili questo implica che i dati verranno restituiti quasi tutti (se non tutti),
causando una ridondanza enorme di valori.

ovvero la medesima geometria ti viene rispedita tutte le volte che si interseca con una qualunque delle altre.

inoltre chiedendo

select *

te chiedi tutti gli attributi sia di tabella A che di tabella B.

infine:

hai creato gli indici spaziali sui campi geometrici di entrambe le tabelle ?


--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------


_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

francesco marucci
se fai:

SELECT *
FROM A, B
WHERE A.THE_GEOM && B.THE_GEOM

sfrutti gli indici spaziali (sempre siano correttamente creati)

francesco


Citando Andrea Peri <[hidden email]>:

>> SELECT *
>> FROM A, B
>> WHERE ST_INTERSECTS (A.THE_GEOM, B.THE_GEOM)
>>
>> che secondo me dovrebbe corrispondere a fare un intersezione con il plugin
>> di Geoprocessing (Qgis).
>>
>> Se la mia ipotesi è giusta, la cosa che trovo strana è che la query impiega
>> circa 20 minuti per restituirmi il risultato (le due tabelle sono piuttosto
>> voluminose) mentre l'intersezione fatta da qgis ci mette un paio di minuti.
>
>
> La query che esegui dice a postgis di restituire tutti e sottolineo tutti
> gli elementi che tra loro si intersecano.
>
> Se per sfortuna i tuoi due archivi sono molto sovrapponibili questo implica
> che i dati verranno restituiti quasi tutti (se non tutti),
> causando una ridondanza enorme di valori.
>
> ovvero la medesima geometria ti viene rispedita tutte le volte che si
> interseca con una qualunque delle altre.
>
> inoltre chiedendo
>
> select *
>
> te chiedi tutti gli attributi sia di tabella A che di tabella B.
>
> infine:
>
> hai creato gli indici spaziali sui campi geometrici di entrambe le tabelle ?
>
>
> --
> -----------------
> Andrea Peri
> . . . . . . . . .
> qwerty àèìòù
> -----------------
>


_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

Niccolo Rigacci
On Tue, Jan 26, 2010 at 09:56:31AM +0100, francesco marucci wrote:
>
> SELECT *
> FROM A, B
> WHERE A.THE_GEOM && B.THE_GEOM

La funzione && sfrutta gli indici spaziali sulle geometrie (se
li hai creati), quindi è veloce. Ma non è l'intersezione
"esatta", è solo l'intersezione delle bounding box delle
geometrie:

http://postgis.refractions.net/docs/ST_Geometry_Overlap.html

Invece la ST_Intersects() fa l'intersezione esatta. Io mi
ricordavo che questa non sfruttava gli indici, quindi usavo una
specie di trucco combinando le due funzioni con una AND per
ottenere risultati veloci. Però ora leggo sul manuale che la
ST_Intersects() sfrutta gli indici:

http://postgis.refractions.net/docs/ST_Intersects.html

Qualcuno mi sa dire se è vero e se à sempre stato così?

--
Niccolo Rigacci
Firenze - Italy
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

Stefano Salvador

La funzione && sfrutta gli indici spaziali sulle geometrie (se
li hai creati), quindi è veloce. Ma non è l'intersezione
"esatta", è solo l'intersezione delle bounding box delle
geometrie:

http://postgis.refractions.net/docs/ST_Geometry_Overlap.html

Invece la ST_Intersects() fa l'intersezione esatta. Io mi
ricordavo che questa non sfruttava gli indici, quindi usavo una
specie di trucco combinando le due funzioni con una AND per
ottenere risultati veloci. Però ora leggo sul manuale che la
ST_Intersects() sfrutta gli indici:

http://postgis.refractions.net/docs/ST_Intersects.html

Qualcuno mi sa dire se è vero e se à sempre stato così?


Non mi ricordo in che punto del manuale sta scritto ma sono sicuro di aver letto da qualche parte che nelle ultime versioni di PostGIS la funzione ST_Intersects prima confronta i BBOX e solo se questi si intersecano passa al confronto esatto, in sostanza hanno incorporato il trucchetto del AND. Se ritrovo il riferimento giro il link.


Ciao
,


Stefano

_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

pcav
Stefano Salvador ha scritto:
> Non mi ricordo in che punto del manuale sta scritto ma sono sicuro di
> aver letto da qualche parte che nelle ultime versioni di PostGIS la
> funzione ST_Intersects prima confronta i BBOX e solo se questi si
> intersecano passa al confronto esatto, in sostanza hanno incorporato il
> trucchetto del AND. Se ritrovo il riferimento giro il link.

esatto: la nuova ST_Intersect e' un wrapper per _ST_Intersect, piu' gli indici.
Saluti.
--
Paolo Cavallini: http://www.faunalia.it/pc
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

Stefano Salvador


> funzione ST_Intersects prima confronta i BBOX e solo se questi si
> intersecano passa al confronto esatto, in sostanza hanno incorporato il
> trucchetto del AND. Se ritrovo il riferimento giro il link.

esatto: la nuova ST_Intersect e' un wrapper per _ST_Intersect, piu' gli indici.
Saluti.

e qui è dove lo dicono (nella nota):



_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
Reply | Threaded
Open this post in threaded view
|

Re: [Gfoss] query postgis

Andrea Peri
In reply to this post by Andrea Peri
Gli indici sono praticamente obbligatori se vuoi fare analisi spaziale,
un esempio per esemplificare:

Prendo una tabella con 288 records e un altra con 5.992 records.

facendo l'operazione che citi te st_intersects in presenza di indici mi ritorna
7.531 elementi in 5 secondi.

rimuovendo gli indici spaziali da entrambe,
i tempi passano a 3 minuti e 28 secondi

Prova a creare gli indici spaziali su entrambe le tabelle, sui campi con geometria e poi riprova.

Ciao,


Il giorno 26 gennaio 2010 09.59, ACQUATI CLAUDIO <[hidden email]> ha scritto:
Ho semplificato mettendo l'asterisco in realtà chiedevo solo alcuni campi, però quando faccio l'intersezione con il geoprocessing mi restituisce comunque tutti i campi; la cosa che mi sembra strana è la notevole differenza di tempi tra le due operazioni; riguardo agli indici non li ho creati.
Ciao

Il giorno 26 gennaio 2010 09.49, Andrea Peri <[hidden email]> ha scritto:
>SELECT *
>FROM A, B
>WHERE ST_INTERSECTS (A.THE_GEOM, B.THE_GEOM)
>
>che secondo me dovrebbe corrispondere a fare un intersezione con il plugin
>di Geoprocessing (Qgis).
>
>Se la mia ipotesi è giusta, la cosa che trovo strana è che la query impiega
>circa 20 minuti per restituirmi il risultato (le due tabelle sono piuttosto
>voluminose) mentre l'intersezione fatta da qgis ci mette un paio di minuti.

La query che esegui dice a postgis di restituire tutti e sottolineo tutti gli elementi che tra loro si intersecano.

Se per sfortuna i tuoi due archivi sono molto sovrapponibili questo implica che i dati verranno restituiti quasi tutti (se non tutti),
causando una ridondanza enorme di valori.

ovvero la medesima geometria ti viene rispedita tutte le volte che si interseca con una qualunque delle altre.

inoltre chiedendo

select *

te chiedi tutti gli attributi sia di tabella A che di tabella B.

infine:

hai creato gli indici spaziali sui campi geometrici di entrambe le tabelle ?


--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------


_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.




--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------


_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.