Newsgroup: it.comp.software.database
Titolo: inefficienza dell'operatore IN

Saluti.
Dato che mi risulterebbe comodo usare l'operatore IN (la versione 
scalare, non la sotto query) volevo sapere quanto è, in generale, 
inefficiente.
In particolare mi interessano le implementazioni per PostgreSQL e SQLite.
Grazie  Manlio Perillo

 In particolare mi interessano le implementazioni per PostgreSQL e SQLite.
perche' non fai qualche prova con EXPLAIN ANALYZE (postgresql) ?
cli=# EXPLAIN ANALYZE SELECT * from prs07 where codprest = 150 or codprest = 160 or codprest = 180;
QUERY PLAN                                              
------------------------------------------------------------------------------------------------------
Seq Scan on prest2007  (cost=0.00..48.22 rows=3 width=229) (actual time=0.090..0.726 rows=3 loops=1)
Filter: ((codprest = 150) OR (codprest = 160) OR (codprest = 180))
Total runtime: 0.782 ms
(3 rows)
cli=# EXPLAIN ANALYZE SELECT * from prs2007 where codprest in (150,160,180);
QUERY PLAN                                              
------------------------------------------------------------------------------------------------------
Seq Scan on prest2007  (cost=0.00..43.25 rows=3 width=229) (actual time=0.073..0.556 rows=3 loops=1)
Filter: (codprest = ANY ('{150,160,180}'::integer[]))
Total runtime: 0.607 ms
(3 rows)
penso sia l'unico modo "serio" per avere una risposta ...
ciao 
-- 
Never try to teach a pig to sing.
It wastes your time and annoys the pig.

 In particolare mi interessano le implementazioni per PostgreSQL e SQLite.
Da verificare con i piani di esecuzione, in quanto una diversa
distribuzione dei valori cambia le cose.
bye 

 
Ok, farò dei test, anche se devo dire che fino ad ora non mi sono mai 
preoccupato di analizzare i piani di esecuzione o comunque di 
ottimizzazione di query...
Grazie  Manlio Perillo

 un momento qualsiasi e scende dopo un "giro" completo.
scusa l'ot con il topic, ma tu queste cose dove le leggi? :o)
no davvero, sono interessantissime
... ti va di dire qualche testo/libro su questi temi?
solo se ti va... che posso capire se tu ne sia geloso, davvero! :o)
ciao e grazie!
Rob

 solo se ti va... che posso capire se tu ne sia geloso, davvero! :o)
Nessun segreto, ma purtroppo anche nessuna soluzione facile...
Il punto dolente e` che, come ben immaginerai, non c'e` una singola
risorsa che abbia tutto quanto; al massimo nei libri ci trovi il
classico capitoletto dedicato al motore di database.
Io uso moltissimo Google, guardo i siti di tutti i grandi nomi
dei database, visito i siti dei professori delle universita`
Italiane ed estere. Senza contare che tutti i grandi dbms hanno
siti con ottimi white paper. Questo restando nel campo del gratis,
anche se bisogna scavare molto.
Ad esempio quella cosa sul Merry-Go-Round l'ho appresa da Celko
sui ng, e poi ho approfondito in rete. I siti di Oracle, Microsoft
ed IBM hanno tanti pdf e tante guide.
Ma il mio vero segreto e`... il servizio di libri usati di Amazon.
Tanti libri bellissimi a prezzi da far ridere. I miei preferiti
sono gli ex biblioteca, che hanno la copertina rigida senza
sovrapprezzo. Naturalmente tutto in Inglese...

 chiave primaria di una tabella) ne clausole WHERE.
Allora sara` tutto molto semplice, in quanto ciascun recupero dara`
"per definizione" al massimo una riga; la query scalera` in maniera
lineare senza problemi.