Ottimizzazione delle Query (Parte II)

Pagina 2 di 3

Ottimizzazione della query

Lo scopo del processo di ottimizzazione della query e'produrre un "piano di esecuzione" il piu'possibile efficiente, basandosi su quanto e' specificatodall'albero della query.

Un "ottimizzatore" teoricamente puo' produrreun piano di esecuzione "ottimale" per ogni query,in realta' questo finira' per produrre un pianosolamente accettabile per la maggioranza delle query. Questoperche' il numero di combinazioni possibili in una Joinaumenta geometricamente e nello stesso modo aumenta lacomplessita' della query.

Senza l'utilizzo di tecniche di "pruning" oaltri metodi euristici per limitare il numero di combinazionivalutate, il tempo richiesto per ottenere una realeottimizzazione della query risulta assolutamenteinaccettabile. In molti casi l'ottimizzatore sceglie unaquery meno efficiente (o totalmente inefficiente) perche'la selezione di una query piu' efficiente richiedepiu' tempo che l'esecuzione della query inefficiente.

I vari database utilizzano di solito differenti tecniche diottimizzazione per ottenere una certa efficienza nel piano diesecuzione.

Ottimizzazione euristica
Questo e' un meccanismo basato su regole specifiche perprodurre un piano di esecuzione efficiente. Dato che la queryricevuta e' una struttura definita, ogni nododell'albero viene mappato direttamente in una espressionealgebrica-relazionale. La funzione euristica e' quindiapplicata per ridurre l'espressione ai suoi termini dibase, ottenendo quindi una rappresentazione piu'efficiente.

Utilizzando un'espressione algebrica si assicura ancheche nessuna delle necessarie informazioni richieste peresaminare i dati verra' persa durante il processo.

Ottimizzazione sintattica
Questo tipo di ottimizzazione si appoggia pesantemente sullacomprensione dell'utente sia del database sottostante,sia della distribuzione dei dati tra le varie tabelle. Insoldoni, si fa' affidamento sul fatto che l'utente hagia' fatto delle scelte in base alle proprie conoscenze.L'ottimizzatore cerca di migliorare l'efficienzadella query scegliendo gli indici appositi tra quellidisponibili per ogni singola tabella.

Questo tipo di ottimizzazione e' estremamente efficientequando si accede a dati in un'ambiente sostanzialmentestatico e quando l'utente sa quello che sta' facendo.Ovviamente, se il database ed i suoi contenuti cambiano inmaniera molto varia o se l'utente non sa esattamente cosarichiedere (la query non e' gia' ottimizzata di suo),i risultati possono essere pessimi.

Ottimizzazione "Cost-Based"
Per eseguire questo tipo di ottimizzazione,l'ottimizzatore richiede informazioni specifiche relativealle informazioni del database stesso. Queste informazionisono strettamente dipendenti dal sistema e possono includerecose come la dimensione dei files, la struttura degli stessi,la disponibilita' di indici, la percentuale di record darecuperare da ogni tabella etc. etc.

Dato che lo scopo di ogni ottimizzazione e' quello diridurre al minimo il numero di record estratti ed il tempo diestrazione, l'ottimizzazione cost-based utilizza leinformazioni sulla struttura del database e la distribuzionedei dati per assegnare un "costo" stimato, intermini di tempo e numero di record da estrarre da ognitabella, numero di accessi etc. per ogni operazione.

Valutando la somma totale di questi "costi" e'possibile selezionare la sequenza piu' efficiente diestrazione dei dati.

Ovviamente, i "costi" assegnati saranno piu' omeno validi a seconda delle informazioni che il sistemaha/mantiene sulla composizione delle tabelle, dei files etc.etc. Mantenere aggiornate queste informazioni occupa tempo erisorse, quindi ogni sistema memorizza un blocco diinformazioni e poi lo aggiorna (ricostruendolo) di tanto intanto. Se sul database vengono effettuate molte operazioniche coinvolgono la distruzione totale e la ricostruzione dazero di svariate tabelle, l'efficienza di questo metododi ottimizzazione e' seriamente compromessa.

Ottimizzazione semantica
Questo tipo di ottimizzazione non e' ancora entrata nelnovero delle ottimizzazioni "standard" , ma e'oggetto di ricerche. Questo metodo si basa sulla conoscenzadella struttura del sottostante database per ignorare oeliminare parti della query che non ritornerebbero risultatoo non ritornerebbero risultati utili.

 

Selezione degli indici

Per ottimizzare una query, la maggior parte degliottimizzatori verifica se nel database sono presenti degliindici utili per migliorare l'efficienza di accesso aidati. Un indice e' considerato "utile" solo seinizia con le stesse colonne (campi) che sono contenute nellaquery. Questa deve essere una corrispondenza esatta.

 

Selezione delle Join

Quando gli indici sono stati scelti e tutte le clausole sonostate associate ad un "costo di processo" ,l'ottimizzatore esegue la selezione delle Join. Questoe' un tentativo di scegliere il migliore ordine percombinare le varie clausole.

L'ottimizzatore confronta vari ordinamenti delleclausole, quindi seleziona quello con il minor tempo diprocesso stimato.

La maggior parte dei database (compreso SQL Server), utilizzauna ottimizzazione cost-based. Perche' ? Perche'e' molto piu' semplice da implementare piuttosto cheuna Euristica.

Continua >>>



Ti potrebbe interessare anche

commenta la notizia