Query Processing - PowerPoint PPT Presentation

query processing n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Query Processing PowerPoint Presentation
Download Presentation
Query Processing

play fullscreen
1 / 58
Query Processing
112 Views
Download Presentation
jock
Download Presentation

Query Processing

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Query Processing

  2. Query processing Van SQL-query naar resultaat Een kijkje onder de motorkap

  3. Algebraïscheoperatoren Klassieke dichotomie voor RA: sets or bags? Theorie van relationele databases: tabel is een set Praktijk (SQL): tabel is een bag R πB(R) πB(R)

  4. Bags (multisets) versus sets Union {a,b,c} U {a,a,c,d} = {a,a,a,b,c,c,d} Intersection {a,a,a,b,c,c,d} ∩ {a,a,b,e} = {a,a,b} Difference (minus) {a,a,a,b,c,c,d} - {a,a,b,e} = {a,c,c,d}

  5. Nieuwe operatoren: projectie Extended projectie R πA+B,A,A(R)

  6. Nieuweoperatoren: sorteren τL(R) = lijst van tupels in R gesorteerd op attributen in L R τC,B↑(R)

  7. Grouping en aggregate functions Trip Γwaar, min(prijs) (Trip)

  8. Query processing: overview

  9. Algebraic rewriting

  10. Algebraic rewriting

  11. Intermezzo • Describe how a Selection distributes over a Minus • Describe how a GroupBy distributes over a Union • Rewrite the following expression for schema R(ABCD), S(AEFG), T(EHK)

  12. Access strategy • We gaan kijken naar datastructuren en algoritmen ten behoeve van het uitvoeren van algebraïsche operatoren • (Blok 4 INFODS) Algoritmische analyse in main memory: tel het aantal stappen van het programma ( := , < ) • Veralgemeniseer dit naar N, de lengte van de input • Onze benadering: tel het aantal keren dat disk access (IO) wordt gedaan en negeer de data processing in CPU en main memory

  13. Hoe doe je … duplicate elimination? • methode 1: sorteren • externalsorting van R kan gedaan worden • via mergesort • methode 2: hashing • hash tupelsnaar table van M buckets • (daarvoorheb je M buffer pages nodig) • haal buckets éénvooréénnaar • main-memory en verwijderduplicaten • IO: 3 * B, met B = het aantal blocks nodig om R • op te slaan

  14. External merge sort: sort R[A,B] on A

  15. Hoe doe je … een selectie? • S := σA1 = C1, …, An = Cn (R) • Verschillende access-paden • Scan de geheletabel en check de condities • tupelgewijs • Gebruikeen index waarvan het attribuut • bevat is in A1,…, An

  16. Hoe doe je … een selectie? • S := σA1 = C1, …, An = Cn (R) • Stel je hebtmeerderegoedeaccesspaden • (bijv. twee indexen) • Optie 1:gebruik het meestselectieve • access-pad • Optie 2: gebruik twee (of meer) access- • paden en bereken de intersectie

  17. Statistics voorkostenschattingen • T(R): het aantal tuples van R • B(R): het aantal blocks van R • V(R,A): het aantalverschillende • waarden van attribuut A in R • Uitdaging: doorrekenen effecten van algebraïsche • operatoren voor statistics van tussenresultaten

  18. Statistics voorkostenschattingen R’ := σA=c (R) T(R’) = … T(R’) = T(R)/V(R,A) Veronderstelling: homogene verdeling waarden domein(A) Nauwkeuriger: histogrammen Prijskaartje: onderhoud Alternatief: sampling

  19. Statistics voorkostenschattingen • U := R S θ: R.A = S.A • T(U) = … • T(U) = T(R)*T(S)/V(S,A) • T(U) = T(S)*T(R)/V(R,A) • Kies minimum van beide ?!

  20. Hoe doe je … een join? • T := R S θ: R.A = S.A

  21. Hoe doe je … een join? • T := R S θ: R.A = S.A • Tuple nested-loop • Block-nested loop • Index-nested loop • Sort-Merge • Hash-Join • Buffer: M pages/blocks

  22. Hoe doe je … een join? • Block-nested loop • S = smallestrelation (nr of blocks) • foreachchunk van M-1 blocks van S do • lees deze blocks in main memory; • foreachblock B2 van R do { • lees B2 in overgeblevenbufferblok; • check allemogelijkecombinaties • van tupels t1 in chunk en t2 in B2; • als t1.A = t2.A, schrijfdan de join van deze tuples naar output • } • IO: B(S) + B(R) *┌ B(S)/(M-1)┐

  23. Hoe doe je … een join? • Index-nested loop • aanname: index op S.A • foreach block B van R do • foreach tupel t in B do { • stel t.A = a; • gebruik de index om alle t2 in S • te zoeken met t2.A = a; • schrijf de join van t met elke t2 weg; • }

  24. Hoe doe je … een join? • Index-nested loop • c = kosten access via index (~2 voor B-tree) • μ= gem. aantal gevonden tupels (schatten uit statistics) • IO: B(R) + (c + μ) T(R) • μ ~= T(S)/V(S,A) • Als A key is in S: μ = 1

  25. Hoe doe je … een join? • Sort-merge • (Indien nodig) sorteer R op A • (Indien nodig) sorteer S op A • repeat • vul de buffer met de blocks van • R en S die de kleinste gemeenschappelijke waarde voor R.A en S.A bevatten; • join de tupels in deze blocks; • until restant R of restant S leeg

  26. Hoe doe je … een join? • Sort-merge

  27. 1. Sort

  28. 2. Merge buffer (mem)

  29. 2. Merge buffer (mem)

  30. 2. Merge buffer (mem)

  31. 2. Merge buffer (mem)

  32. 2. Merge buffer (mem)

  33. 2. Merge buffer (mem)

  34. Hoe doe je … een join? • Hash Join • Kies een hash-functie voor het domein van A • Kies de grootte M van de hash-table • Hash elk tupel van R naar het corresponderende bucket • Hash elk tupel van S naar het corresponderende bucket • Haal elk bucket naar main-memory en construeer de resultaat-tupels

  35. Join R[A,B] with S[A,C]h(a) = a DIV 10

  36. Hash Join on A Bucket: h(a) = 0 Bucket: h(a) = 1 Bucket: h(a) = 2

  37. Hash Join on A Bucket: h(a) = 0 Join each bucket in main memory: Bucket: h(a) = 1 adds: Bucket: h(a) = 2

  38. Join each bucket in main memory: Bucket: h(a) = 0 Bucket: h(a) = 1 adds: Bucket: h(a) = 2