Selezione

data una query di selezione come la seguente

SELECT *
FROM Recensioni R
WHERE R.rivista='Sapore DiVino'

L’obbiettivo e quello di determinare qual’e la strategia di accesso migliore, questo può dipendere da diversi fattori

Stimare il numero di risultati

L’efficienza di due strategie di selezione e fortemente dipendente dal numero di record del risultato, non e possibile ovviamente saperlo a priori ma si può ottenere una stima come dove:

  • record in output stimati
  • numero di record in input
  • e il fattore di selettività della query, una query e molto selettiva se piccolo

se i valori dell'attributo di selezione sono uniformemente distribuiti allora

anche in questo caso il costo dipende dalla presenza o meno di indici

  • se non ci sono indici si deve leggere tutto il file dati (costo )
  • indice clustered (costo )
  • indice un-clustered (costo ) (si fa uso del Modello di cardenas)

Selezione alternativa con indice un-clustered

In caso di indice un-clustered si può decidere di ordinare i RID prima di accedere al file dati per ottimizzarne l’accesso

Selezioni con condizioni multi-attributo

In caso di condizioni multi-attributo l’utilizzo di indici non e sempre possibile, in particolare:

  • gli indici hash possono essere utilizzati solo se sono presenti termini di uguaglianza per ogni attributo chiave dell’indice
  • i b+tree possono essere utilizzati solo se i termini presenti compongono un prefisso delle chiavi dell’albero (si fa riferimento a indici multi attributo)

Selezioni senza disgiunzione

In caso di condizioni senza disgiunzione (condizioni in AND) si applicano i metodi di accesso per i predicati risolubili e poi si valutano i predicati residui

E possibile usare più indici e poi fare l’intersezione dei risultati

Selezione con disgiunzioni

In caso di predicati in disgiunzione (condizioni in OR) se anche solo una condizione non e risolubile si deve scandire il file, altrimenti si utilizzano gli indici e si fa l’unione del risultato

DB2, tipologie di predicato

Per poter valutare un interrogazione, DB2 distingue fra 4 diverse tipologie di predicati di ricerca

TipoDescrizione
Range delimitingpredicati che delimitano il range di foglie a cui accedere
Index SARGablenon delimitano il range di foglie ma escludono elementi durante la ricerca nell’indice
data SARGablepredicati che possono essere applicati nel momento di accesso ai dati
ResidualPredicati residui, risolti in memoria centrale

Ogni tipo di predicato a effetti diversi sull’efficienza di una query, in particolare:

range delimitingindex SARGabledata SARGableResidual
riduzione index I/OSINONONO
Riduzione Data I/OSISINONO
Riduzione numero di tupleSISISINO
Riduzione output finaleSISISISI

PREVIOUS NEXT