CALCOLO DEL COSTO DI MODIFICA DEI DATI costo di accesso 1 ipotesi Ipotesi di base sui metodi di accesso: scan sequenziale, oppure accesso su singlo indice, oppure intersezione di tids Ipotesi di base sugli indici: indici clustered indici unclustered con tid list ordinata TIPO 1 indici unclustered con tid list disordinata TIPO 2 costo di accesso 2
scansioni della relazione Scansioni ordinate: indice clustered scansione sequenziale tid list ordinata indice di tipo 1 per un valore di chiave Scansioni disordinate: indice tipo 2 indice di tipo 1 per più valori di chiave costo di accesso 3 ottimizzatori I casi UPDATE e DELETE hanno il where : DELETE EMP WHERE UPDATE EMP SET. WHERE Il costo sarà dato da tre termini: CAT+ CRT+ CAI COSTO DI ACCESSO ALLE TUPLE + COSTO DI RISCRITTURA DELLE PAGINE MODIFICATE + COSTO DI AGGIORNAMENTO DEGLI INDICI L ottimizzatore deve scegliere la via di accesso per la ricerca delle tuple che riduca il costo globale, non solo il primo termine. SQL esclude l accesso attraverso un indice su una colonna nella clausola SET per non rischiare di modificare le stesse tuple più volte. costo di accesso 4
scansione Per il costo di accesso si usano le formule ed i criteri visti in precedenza. Ci occupiamo qui del costo di riscrittura delle tuple. Bisogna considerare se la scansione della relazione decisa dall ottimizzatore è ordinata rispetto alle tuple(pagine) da riscrivere oppure no. SCANSIONE ORDINATA: NB: pagine della relazione NR: frazione di pagine che possono contenere tuple da riscrivere NR=NB*F P, dove F P 1 è il fattore di filtro sulla colonna ordinata presente nella clausola WHERE (1 se non c è) NR NB costo di accesso 5 Scansione ordinata Costo di riscrittura: qualunque sia la via d accesso le E tuple da riscrivere sono in NR quindi se la riscrittura è ordinata CRT = Φ(E, NR) Scansione disordinata Costo di riscrittura: con l accesso su indice di tipo 1 CRT = F s NKΦ(E/( F s NK), NR) dove F s è il fattore di filtro sulla colonna K su cui è costruito l indice usato per l accesso, NK: cardinalità di chiave K Costo di riscrittura: con l accesso su indice di tipo 2 CRT = E costo di accesso 6
insert DBMS mantiene il sort delle tuple: le E tuple vengono ordinate prima dell inserimento, assumendo che tutte le tuple di un gruppo con un dato valore di K possano essere contenute nella stessa pagina e che gli nk valori di K dei gruppi non siano contigui, si ha: Costo-inserimento = Cins = Φ(nk, NB) min (nk, NB) min (E, NB) le tuple non vengono ordinate: Cins = E DBMS non mantiene l ordinamento e la tuple vengono inserite in fondo: Cins = E/Ntp con Ntp numero di tuple per pagina costo di accesso 7 manutenzione indici Due casi base: 1) scan della relazione disordinato rispetto ai tid nelle foglie dell indice da modificare 1a) modifica di Ix unclustered con scan su (Ix ) Ix 1b) modifica di Ip clustered con scan su di tipo 2 Ip costo di accesso 8
manutenzione indici 1c) modifica di Ip clustered con scan su di tipo 1 con + val di K Ip costo di accesso 9 2) scan della relazione ordinato rispetto ai tid nelle foglie dell indice da modificare 2a) modifica di Ip clustered con scan sequenziale, tid list ordinata, unclustered tipo 1 con 1 val. di K Ip manutenzione indici 2b) modifica di Ix con scan su Ix (insert o delete, no update) costo di accesso 10
update Consta di una parte insert ed una delete cioè Cu = Ci + Cd Ci e Cd possono corrispondere a casi ordinati e disordinati Esempio: UPDATE EMP SET A = <espressione> WHERE A = a nell indice i tid vengono eliminati dal gruppo A= a e inseriti in altri gruppi derivanti del calcolo dell espressione a costo di accesso 11 update Parte insert: caso SET A = <valore> si assume che tutte le tid dell indice su A eliminate da altri valori di A si inseriscano nella stessa foglia: Ci = 2 ( 1 accesso all inizio e 1 riscrittura alla fine dell esecuzione) caso SET A = <espressione> non potendo fare previsioni si assume che tutte le tid si inseriscano in foglie diverse Ci = E*2 ( 1 accesso e 1 riscrittura per ogni tid) costo di accesso 12
update Parte delete: casi 1a, 1b (disordinati): le cancellazioni di tid avvengono in modo disordinato: Cd = E*2 caso 1c (disordinato, tipo 1 con + val. di K) E tuple vengono modificate con scan su un tipo 1 per + val di K con Fs*NK scan ordinati, ogni scan modifica il clustered in modo ordinato: Cd = 2*Fs *NK* Φ(E/(Fs*NK), Lp) costo di accesso 13 Lp può essere sostituito da Fp*Lp se nello statement esiste un predicato di restrizione sul clustered, che non può esser preso come via d accesso perché la sua colonna compare nella clausola SET...) manutenzione indici Ip Fp*Lp Fp*NB Il costo di update per un indice varia tra : 2+2< Cu <2*(E+E) costo di accesso 14
delete I costi sono analoghi alla parte delete di update ad eccezione di un caso: si accede alla relazione con un metodo ordinato rispetto all indice (anche l indice da modificare), quindi il costo corrisponde ad una scansione ordinata sulle foglie dell indice da modificare: Cd = Φ(E, Lx)*α dove α = 2 oppure 1 se si tratta dello stesso indice usato per l accesso e L diventa Fx*Lx se c è un predicato con filtro Fx sulla colonna (x) dell indice. Se Fx*Lx = 1, Cd=1 *α ( delete concentrato) costo di accesso 15 update ESEMPIO 1: SPARE_PT (PTNO, SUPP_CODE, PNAME, SHELF, PRICE, ) UPDATE SPARE_PT SET SHELF = 5 PRICE = PRICE * 1.15 WHERE SHELF = 10 AND SUPP_CODE = 25 Supponiamo di avere indici non ordinati, sia su SHELF che su PRICE. Supponiamo E=50, per l'indice su PRICE: C PRICE = (E + E) *2= 200 per l'indice su SHELF, se F SHELF *L SHELF = 1 : C SHELF = 2 + 2 = 4 costo di accesso 16
update ESEMPIO 2: SPARE_PT (PTNO, SUPP_CODE, PNAME, SHELF, PRICE, ) UPDATE SPARE_PT SET SHELF = 55 WHERE PTNO BETWEEN 125 AND 135 AND altri predicati.. Supponiamo: esistono indici clustered su SHELF e unclustered su PTNO, SPARE_PT ha 100 pag. ma è contenuta in un file STORE con 400 pag., E =320 sono le tuple che soddisfano il pred. su PTNO ma E= 200 quelle filtrate con altri pred.. Siano CA STORE = 400 (sequenziale) CA PTNO =280 (caso se l indice è di tipo 1) CA PTNO =320 (caso se l indice è di tipo 2) costo di accesso 17 update MODIFICA DELLE TUPLE con scan sequenziale: CRT SEQ = Φ(E, NB) = 87 con scan su indice (supponiamo Fx*NK = 10, E/(Fx*NK) = 20): CRT PTNO = Fx*NK *Φ(E/(Fx*NK), NB) = 180 o, CRT PTNO = E = 200. MODIFICA DELL INDICE clustered assumendo Lp=10 con scan sequenziale: Ci + Cd = 2+ 10 +2 = 22 con scan su indice PTNO: Φ(20, 10) = 9 tipo 1: C i + C d = 2 + 10*9*2 = 182, tipo 2: C i + C d = 2 + 200*2 = 402. TOTALI: C SEQ = 87 + 22 + 400 = 509 ATT.: la scan seq. può essere C PTNO = 180 + 182 + 280 = 642 migliore degli indici! C PTNO = 200 + 402 + 320 = 922 costo di accesso 18