Download præsentationen
Præsentation er lastning. Vent venligst
1
Query optimization MICHAEL I
Query optimization MICHAEL I. Schwartzbach Kristoffer just andersen Institut for datalogi
2
Collection Classes Matematiske strukturer som standard klasser i Java
Basale mængder: int, String Set<S>: endelige delmængder af S: 2 Map<S,T>: endelige funktioner fra S til T: S T List<S>: endelige sekvenser af S: S* class C{S s,T t}: kartesisk ptodukt af S og T: S×T Alle sædvanelige operationer er tilgængelige S
3
Abstrakt vs konkret Abstrakte collection klasser har konkrete implementationer Map: HashMap, LinkedHashMap, … Set: HashSet, TreeSet, EnumSet, … List:; ArrayList, LinkedList, … Gør forskellige delmængder af operationer effektive
4
datastrukturer En datastruktur er:
en sammensætning af matematiske strukturer en nøje udvalgt samling af operationer en specielt effektiv implementation Søgetræ: 2 , insert, member, delete, size Priotitetskø: 2 , insert, deletemin, empty Stak: S*, push, pop, empty Union-Find: 2 , singleton, union, find S S 2 S
5
prototyper Udstrakt brug af collection klasser kan give:
hurtigt byggede implementationer ikke nødvendigvis særligt effektive Query databasen: tabel: (String String)* direktiv (query): × (String (String ×String ×String)) String
6
Size matters Query: 300 linjer kode
parser, fortolker, engine (select, project, join) RASMUS: 20,000 linjer kode MySQL; 1,800,000 linjer kode
7
optimering Databaser, fortolkere og compilere udfører kode
men programmøren har næppe skrevet den bedste version… Derfor bruger de mange kræfter på optimering; laver en analyse af koden omskriver den til en mere effektiv version garanterer, at den giver samme resultat (sundhed)
8
Optimizere i praksis gcc –o3 bruger næsten al tiden på optimering
mest lokale forbedringer og kortslutning af kontrolflow ikke nye algoritmer og datastrukturer giver typisk op til 50% forbedring af køretiden Effekten på databaser er vilkårligt stor forskellen på om queries overhovedet kører eller ej involverer automatisk valg af algoritmer og datastrukturer
9
Hvor gode er compilere? /* naive */ for (i = 0; i < N; i++) {
a[i] = a[i] * 2000; a[i] = a[i] / 10000; } /* expert */ b = a; *b = *b * 2000; *b = *b / 10000; b++;
10
Bedre end dig! -o1 -o2 loop level sparc mips alpha naive 20.5 21.6 7.9
for (i = 0; i < N; i++) { a[i] = a[i] * 2000; a[i] = a[i] / 10000; } /* expert */ b = a; *b = *b * 2000; *b = *b / 10000; b++; loop level sparc mips alpha naive 20.5 21.6 7.9 -o1 8.8 12.3 3.3 -o2 11.2 3.0 expert 19.5 17.6 7.6 12.5 15.4 4.1 10.7 12.9 3.9
11
Query optimering En optimizer er aldrig helt optimal
Man kan altid fange lidt flere specialtilfælde Masser af tommelfingerregler: project og select før join fjern søjler, der ikke bruges i svaret kopier select til begge sider af join …
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.