Newsgroup: it.comp.software.database
Titolo: Due domande: SELECT e indici

Salve a tutti!
vi pongo velocemente due domande, che più che altro sono curiosità.
La prima riguarda una query del tipo: SELECT count(*) from table.
Assumendo di avere la classica tabella di esempio:
nome | cognome | età | indirizzo | telefono | fax | email
mi chiedevo se per il motore sia più onerosa un query del tipo:
select count(*) from tabella
oppure
select count(nome) from tabella
o se le due, con una quantità non esagerata di dati, si equivalgano a
livello di "pesantezza".
Ovviamente, count(nome) potrebbe essere benissimo count(cognome) o
altro, con la _certezza_ che il campo a cui il count() si riferisce
non sia mai vuoto.
La seconda riguarda gli indici: da quanto ho appreso anche leggendo
questo NG, un indice di norma velocizza la ricerca di un dato
all'interno di una tabella, andando a rallentare leggermente
l'inserimento dei dati stessi.
Nel caso in cui si abbia una tabella sulla quale si lavora
molto più in scrittura che in lettura (con un rapporto lettura:scrittura
spannometricamente attorno a 1:1000) vale la pena creare un indice per
rendere la lettura e la riceca dei dati più veloce o andrei solamente a
mettere un seppur piccolo freno alle varie insert?
(spero di essermi spiegato bene e di aver fornito i dati necessari!!)
Ah, un'altra cosa venutami in mente al volo ...
Si sente spesso parlare molto bene del libro "Database design for mere
mortals ... ", e preso dalla curiosità mi sono andato a vedere il
libretto su Amazon ... Per non fare un acquisto errato, chi l'ha letto
mi potrebbe dire se tale libro sia abbastanza cross-platform e cross-db
(probabilmente è un neologismo!!)? Intendo,non si ferma a fare esempi su
uno o più specifici Db, piattaforme e via di seguito, no? Preferirei
avere qualcosa per le mani che mi parli del teorico, poi le varie
differenze, implementazioni e compagnia che ogni Db presenta rispetto allo
standard me le sorbisco io! :-)
TIA
--ev

 Intendo,non si ferma a fare esempi su uno o più specifici Db
No. Si riferisce alla strutturazione dei database relazionali. Ci sono
degli esempi ma non sono relativi ad un singolo database.
Davide

 Deve leggersi lo stesso tutta la tabella quindi...
No... non č vero.
Se il campo č nullable e si forza l'indice, viene fatto
un index scan invece di un full table scan...
Select /*+ index(tabella) */ count(*) from tabella
puň essere di gran lunga piů veloce di
Select count(*) from tabella
Ci fů anche un thread del genere pochi giorni fa...
/G

 degli esempi ma non sono relativi ad un singolo database.
 
Hmmm, bene, anche l'ultimo dubbio č stato allontanato!!
Grazie di tutto!
--ev

 mortals ... ", e preso dalla curiosità mi sono andato a vedere il
[...]
Il design di una base dati DEVE essere x-platform...
No l'ho mai preso in considerazione quel libro e forse lo farò in
futuro,
io ho imparato sul campo e sul Atzeni-Paraboschi... è in italiano ed è
un testo universitario.
/G

 ha scritto nel messaggio
news:amul4j$ojj$1...@newsreader1.mclink.it...

Anche con select count(*) apre in genere un'indice (bitmap).. naturalmente
se esiste.. (almeno con optimizer =ALL_ROWS)
(ma si sta parlando di Oracle, vero?)

 (ma si sta parlando di Oracle, vero?)
Spero...
/G

 standard me le sorbisco io! :-)
elmasri-navate ?
poi in italiano, non ricordo se ceri o cerami .
e bada ben bada ben :
se vivi in una città con informatica/ing inf ,
gli appunti di documentazione automatica/basi dati.
.
--------------------------------
Inviato via 
http://usenet.libero.it


Voi due magari si, io sono molto più "terra terra"! ;-)
Credo che magari poco ma lo si notasse!!!
--ev



Per la count :
select count(1)
from
.....
e' la piu' performante perche' riduce i tempi di I/O. non seleziona nessun
campo
di una tavola.
Le insert per tabelle indicizzate sono abbastanza performanti, le select per
tabelle non indicizzate sono un pugno in occhio (chiaramente le condizioni
di where devono includere almeno un campo indicizzato).
Per un buon libro :
Foundamentals of data base systems (third edition)
Elmasri. Navathe
Addison Wesley
Saluti
Gauss
Non ha senso


 una tabella su un campo tipo Si/no Maschio/Femmina
QUesto non e' vero :
Dipende dal grado di selettivita' della tua query.
Immagina di avere un tavola con milioni di record e di dover selezionare
solo quelli che hanno un flag = SI (Classico esempio del SENDFLAG)
Se sai a priori che i SI sono pochissimi...... noterai la notevole
differenza.
GARANTITO.
(se poi sai anche giocare con il tipo di ordinamento dell'indice (desc) i
risultati
sono ancora piu' performanti! )
Naturalmente devi saperlo a priori.
Saluti.
Gauss


 Naturalmente devi saperlo a priori.
Vero...
/G