Procesarea *i optimizarea interog*rilor

Download Report

Transcript Procesarea *i optimizarea interog*rilor

Procesarea și optimizarea
interogărilor
Cuprins



procesarea,
optimizarea și
executarea interogărilor scrise în limbaj de nivel înalt, de
către un sistem de gestiune a bazelor de date.
Procesarea interogărilor
interogare
parsare și
transformare
expresia în algebra relațională
optimizare
rezultatul
interogării
execuție
date
plan de execuție
statistici
Procesarea interogărilor

Interogările SQL sunt descompuse în blocuri care sunt
transformate în limbajul algebrei relaționale și optimizate.

Un bloc conține o singură expresie SELECT-FROMWHERE, împreună cu clauze GROUP BY și HAVING.
Algoritmi pentru procesarea operației
selecție




Pentru operația de selecție există un număr mare de
algoritmi pentru găsirea înregistrărilor în fișier:
Căutare liniară: se parcurge tot fișierul și se verifică dacă
fiecare înregistrare îndeplinește condițiile de căutare;
Căutare binară: Dacă operația de căutare are o condiție
de egalitate pe un atribut după care fișierul este ordonat,
atunci căutarea binară este mai eficientă decât căutarea
liniară.
Căutare folosind indexul pe atributul care apare în
condiția din operația de selecție.
Algoritmi pentru procesarea operației de
SORTARE

Sortarea este una dintre cele mai utilizate operații în
procesarea interogărilor:

dacă apare clauza ORDER BY, rezultatul interogării
trebuie sortat,
dacă se folosește algoritmul ”merge-sort” în operația de
joncțiune de asemenea trebuie sortate înregistrările,
dacă folosim operațiile de intersecție, reuniune, eliminarea
duplicatelor pentru operația de proiecție avem nevoie de
sortarea înregistrărilor.


Algoritmi pentru procesarea operației de
SORTARE




Pentru relațiile care sunt memorate în memorie, tehnici
ca ”quicksort” sunt folosite.
Pentru relații foarte mari care nu pot fi stocate în
memorie se folosește ”sort- merge” extern.
Algoritmul de sortare externă folosește tehnica ”merge sort” care începe prin a sorta subfișiere de mică
dimensiune ale fișierului principal și apoi le combină
creând subfișiere sortate mai mari care la rândul lor sunt
combinate.
Ca și alți algoritmi, algoritmul de sortare externă necesită
un spațiu tampon în memoria principală pentru sortarea
sufișierelor si combinarea lor.
Algoritmi pentru procesarea operației JOIN



Operația de joncțiune este mare consumatoare de timp.
Cele mai des întâlnite tipuri de joncțiuni în interogări sunt
joncțiunea de egalitate și joncțiunea naturală.
Pentru implementarea operației de joncțiune (R join S)
sunt folosiți diferiți algoritmi :


Nested-loop join – pentru fiecare înregistrare t din R se
extrage înregistrarea s din S și se verifică dacă se îndeplinește
condiția de joncțiune, dacă există.
Single nested-loop join – dacă există definit un index pe unul
din atributele din condiția de joncțiune, atunci se folosesc căile
de acces pentru a găsi înregistrările care se potrivesc.
Algoritmi pentru procesarea operației JOIN


Sort-merge join – dacă înregistrările din cele două relații sunt
sortate după valorile atributelor care apar în condiția de
joncțiune, operația se poate implementa în cel mai eficient mod
posibil. Ambele fișiere sunt parcurise concurentîn ordinea
atributelor de joncțiune, potrivind înregistrările care au aceleași
valori pentru ele. Dacă fișierele nu sunt sortate, ele pot fi
sortate folosind sortarea externă.
Alegerea unuia dintre acești algorimti se face prin
estimarea costului care ia în considerare informații ca:
numărul de înregistrări și blocuri din relațiile implicate în
joncțiune.
Algoritmi pentru procesarea altor operații

Eliminarea duplicatelor poate fi implementată prin sortare.



Optimizarea poate fi făcută prin eliminarea duplicatelor în timpul
sortării externe în ambii pasi (generarea subfisierelor și combinarea
lor).
Pentru operația de proiecție se iau atributele corespunzătoare
din fiecare tuplu, apoi urmează eliminarea duplicatelor.
Operațiile de agregare pot fi implementate asemănător celei
de eliminare a duplicatelor:


Prin sortare se pun tuplurile în grupuri și apoi funcțiile de agregare
sunt aplicate pe fiecare grup.
Optimizarea poate fi făcută prin gruparea tuplurilor în același grup în
timpul sortării externe în ambii pași (generarea subfișierelor și
combinarea lor).
Combinarea operațiilor folosind ”pipelining”




O interogare specificată în SQL va fi translatată în algebra
relațională care este un șir de operații relaționale.
Dacă se va executa o singură operație la un moment dat, vor
trebui generate fișiere temporare pe disc pentru a stoca
rezultatele temporare ale acestor operații, creându-se astfel o
încarcare mare.
Generarea și încărcarea fișierelor temporare mari pe disc sunt
consumatoare de timp.
Pentru a reduce numărul mare de fișiere temporare, se
folosește procesarea ”pipelining” sau bazată pe fluxuri.
Procesarea ”pipeline” constă în evalurea simultană a
operațiilor, trecând rezultatul unei operații urmatoarei operații
fără a mai stoca pe disc rezultatele temporare.
Optimizarea interogărilor




Optimizarea interogării este procesul de selectare a celui mai
eficient plan de execuție a interogării.
Nu se așteaptă numai ca utilizatorii să scrie interogări eficiente,
ci și sistemul să construiască un plan eficient de execuție care
să minimizeze costurile.
Unul dintre aspectele optimizării apare la nivelul algebrei
relaționale, unde sistemul trebuie să găsească o expresie care
este echivalentă cu expresia dată, dar mai eficientă la execuție.
Un alt aspect este selectarea unei strategii detaliate de
procesare a interogării, cum ar fi alegerea unui algoritm pentru
executarea unei operații, alegerea unor indecși, etc (Silber).
Evaluarea interogărilor

Exemplu: dorim să afișăm codurile clienților care au
conturi la filiale cu locația în Craiova.
Evaluarea interogărilor

Există mai multe moduri de a evalua o interogare:



folosirea expresiilor echivalente
folosirea diferiților algoritmi pentru operații
Exemplu de plan de evaluare detaliat cu specificarea
algoritmilor folosiți pentru fiecare operație și cum sunt
coordonate aceste operații.
Transformarea expresiilor relaționale



Două expresii relaționale sunt echivalente în algebra
relațională dacă generează același set de tupluri, ordinea
tuplurilor nefiind relevantă.
Regulile de echivalență sunt următoarele:
1. Operația de selecție cu condiții legate prin conjunctie
pot fi descompuse în selecții individuale:


1  2
( E )    1 (  2 ( E ))
2. Operațiile de selecție sunt commutative:
  (  ( E ))    (  ( E ))
1

2
2
1
3. Numai ultima operație de proiecție dintr-un șir este
necesară, celelalte pot fi omise:
 L1 (  L 2 ( (  Ln ( E ))  ))   L1 ( E )
Transformarea expresiilor relaționale

4. Selecțiile cu produsul cartezian (sau joncțiune) pot fi înlocuite numai cu joncțiune theta:

5. Joncțiunile theta și naturale sunt commutative:

6(a)Joncțiunile naturale sunt asociative:

6(b) Joncțiunile theta sunt associative , doar dacă condiția 2 implică attribute numai din E2 și
E3:
Transformarea expresiilor relaționale

7.Selecția poate fi distribuită peste joncțiunea theta cu
următoarele condiții:
7(a) Când toate atributele din 0 implică numai atributele (E1)
7(b) Când  1 implică numai attribute din E1 și 2 implică nuami
attribute din E2.