Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ricercare quanti valori da un dato insieme sono contenuti in una colonna

0 views
Skip to first unread message

Giulio Petrucci

unread,
Sep 15, 2009, 11:25:42 AM9/15/09
to
Ciao a tutti,

premesso che non ho grosse competenze in campo SQL, vi chiedo un
consiglio per "ottimizzare" la soluzione ad un problema con cui sto
avendo a che fare in questi giorni.

Ho una tabella "Item" in cui ho una colonna "ItemCode" che contiene un
codice alfanumerico di 10 caratteri. Io ho una lista di codici
alfanumerici di 10 caratteri e dovrei spere quali di questi sono
contenuti nel mio db. I codici sono univoci e cosituiscono una chiave
primaria per la tabella.

Le mie domande (a risposta delle quali sono graditissimi link a risorse
sparse, purché comprensibili al sottoscritto) sono:

1. la query l'ho impostata così:
SELECT ItemCode FROM Item WHERE ItemCode IN ([Lista di codici da
verificare]);
Anche se le performance sono accettabili qualcosa mi dice che non è la
scelta migliore... avete qualche altra alternativa da propormi (anche in
vista di una imminente crescita della mole dei dati)?
2. devo prendere qualche accorgimento sulla colonna?

A titolo informativo, vi dico che il sistema dovrà lavorare su due dbms,
per la precisione:
- PostgreSQL 8.4.1
- SQL Server Express 2005

Ciao e grazie in anticipo,
Giulio
--

Giacomo Degli Esposti

unread,
Sep 15, 2009, 12:04:20 PM9/15/09
to
On 15 Set, 17:25, Giulio Petrucci <sis...@nonono.boh> wrote:
> Ho una tabella "Item" in cui ho una colonna "ItemCode" che contiene un
> codice alfanumerico di 10 caratteri. Io ho una lista di codici
> alfanumerici di 10 caratteri e dovrei spere quali di questi sono
> contenuti nel mio db. I codici sono univoci e cosituiscono una chiave
> primaria per la tabella.
[...]

> 1. la query l'ho impostata così:
> SELECT ItemCode FROM Item WHERE ItemCode IN ([Lista di codici da
> verificare]);
> Anche se le performance sono accettabili qualcosa mi dice che non è la
> scelta migliore... avete qualche altra alternativa da propormi (anche in
> vista di una imminente crescita della mole dei dati)?

Non e' chiarissimo: la mole di dati in crescita e' ITEM o [lista
codici] ?
Se e' ITEM non devi preoccuparti, basta che la colonna abbia un indice
e le prestazioni non degradano troppo, anche per una lista di codici
lunga.
Se invece la lista di codici tende a crescere allora ti consiglio di
creare una tabella e modificare la query in:

SELECT ItemCode FROM Item WHERE ItemCode IN (select Codice from
ListaCodiciDaVerificare)

o meglio:

SELECT ItemCode FROM Item join ListaCodiciDaVerificare on
Item.ItemCode = ListaCodiciDaVerificare.Codice


> 2. devo prendere qualche accorgimento sulla colonna?

Per MSSQL direi di no: se e' indicato come primary key mi sembra che
abbia gia' un indice creato automaticamente. Per PG non so dirti.

ciao
Giacomo

Giulio Petrucci

unread,
Sep 15, 2009, 12:11:25 PM9/15/09
to
Ciao Giacomo,

innanzitutto grazie per la risposta,

Giacomo Degli Esposti wrote:
> Non e' chiarissimo: la mole di dati in crescita e' ITEM o [lista
> codici] ?

Item, ossìa il numero di righe nella tabella.

> Se e' ITEM non devi preoccuparti, basta che la colonna abbia un indice
> e le prestazioni non degradano troppo, anche per una lista di codici
> lunga.

Ok, perfetto.

> Se invece la lista di codici tende a crescere allora ti consiglio di
> creare una tabella e modificare la query in:
>
> SELECT ItemCode FROM Item WHERE ItemCode IN (select Codice from
> ListaCodiciDaVerificare)
>
> o meglio:
>
> SELECT ItemCode FROM Item join ListaCodiciDaVerificare on
> Item.ItemCode = ListaCodiciDaVerificare.Codice

Il problema è questo: la lista dei codici da verificare varia di volta
in volta... posso creare una tabella temporanea o cose del genere?

> Per MSSQL direi di no: se e' indicato come primary key mi sembra che
> abbia gia' un indice creato automaticamente. Per PG non so dirti.


Ok, mi documenterò per PGSQL.
Ciao e grazie,
Giulio
--

0 new messages