Newsgroup: it.comp.software.database
Titolo: [Domanda tecnica] Livello fisico di un database

Salve ragazzi, vorrei porvi una domanda sull'livello fisico di un 
database. Ogni DBMS utilizza sempre un solo modo per l'accesso dei dati 
sul disco (tipo sequenziale, indice o casuale) o può implementare al suo 
interno diversi modi di accesso? Se è quest'ultima la risposta è il db 
admin a dirgli come fare? oppure lo sceglie lui secondo un criterio 
(quale criterio?).
Ciao a tutti
Marko!

makko ha scritto:

Mi correggo da solo l'oggetto e parte del messaggio: mi riferivo al 
livello fisico del dbms.
Grazie a tutti.


Ciao Makko,
la risposta complessa e dipende dall'RDBMS che usi.
L'accesso al dato su disco e' sempre randomico.
al massimo potrai avere scritture e letture sequenziale per via di una 
casualita' (dato scritto in settori contigui del disco).
Tra l'altro i moderni storage hanno livelli di astrazione cosi' 
complessi che non saprai mai fisicamente dove si trovano i dati.
Se l'accesso al dato che intendi, invece, e' un po' piu' ad lato livello 
(come l'uso di indici su tabelle) la scelta solitamente, se non forzata, 
e' dettata da regole che usa l'ottimizzatore del motore che usi.
Un DBA puo' solitamente forzare le regole (come spesso anche l'utente 
finale che esegue la query).
I modi di accesso alle righe di una tabella sono moltissimo e 
diversissimi tra loro.
-- 
Fabrizio Magni
fabrizi...@mycontinent.com
replace mycontinent with europe


se fai un "order by" la query diventa piu lenta
poi dipende ca quante tabelle apri contmporaneamente
e da come accedi ai dati


 
Le tabelle non si aprono, non sono file.
In ogni caso l'affermazione non ha basi a supporto.
Perche' una query di piu' tabelle e' eseguita in meno tempo?
Gli algoritmi di accesso al dato sono in genere legati alla dimensione 
del dato.
Tralasciamo poi che ogni RDBMS usa metodi diversi per acquisire le 
informazioni... anzi, uno stesso RDBMS usa diversi metodi!
Per asurdo potresti persino ritrovarti in una situazione dove la stessa 
mole di dati e' divisa su dieci tabelle invece di essere in una sola e 
la tua query avere performance migliori con i dieci join.
Il motivo? Accessi a disco minori, strutture di accesso al dato piu' 
intelligenti.
Ciao


 oppure lo sceglie lui secondo un criterio (quale criterio?).
Solitamente il query optimizer cercherà di ottenere un piano di
accesso ai dati meno 'dispendioso' possibile.
Si considerano più percorsi di recupero; si attribuisce un 'costo'
a ciascuna operazione; il percorso con minore costo è quello
che verrà scelto.
Aggiungo solo che è un gran bene che il dbms sia lasciato libero di
scegliersi il più possibile da solo il metodo di recupero dati.
Vi sono delle ottimizzazioni che uno neanche si immagina.
Altre invece entrano in gioco solo con carichi elevati del server.
Quanti sono al corrente dei metodi Merry-go-round ed Elevator
Sorting? Il bello è proprio che non occorre saperli, la macchina li
sceglie da sola!
Forzando via codice un metodo piuttosto che un altro, si
preclude il lavoro all'ottimizzatore; per questo andrebbero tolte
tutte le clausole Sql tipo hint, index, cursori, loop etc...

 che verrà scelto.
[CUT]
Grazie a tutti
Marko!