140 likes | 195 Views
Indexering in databases. Het probleem. Het probleem. Ongeveer 10.000.000 auto’s in Nederland Query: zoek op kenteken Aannames Een tuple (record) kost ongeveer 400 bytes Een disk block bevat 8 kbyte , dus 20 records per block Een disk IO kost 5 msec
E N D
Het probleem • Ongeveer 10.000.000 auto’s in Nederland • Query: zoek op kenteken • Aannames • Eentuple (record) kostongeveer 400 bytes • Een disk block bevat 8 kbyte, dus 20 records per block • Een disk IO kost 5 msec • Maximalezoektijd (volledige table scan) • 10.000.000 / 20 = 500.000 disk IO • 2500 sec = 41:40 minuten • Gewenstezoektijd: < 1 sec
Main memory vsharddisk • Main memory • Typical size : 4 – 256 GB • Access time: 100 nsec • Volatile • Harddisk • Typical size : 0.5 – 4 TB • Access time: 5 msec (without clustering) • Non-volatile • Unit of traffic: block (2 – 32 kbyte)
De oplossing: indexering • Indexeringsteltons in staatomsneltezoeken op de waarde van eenattribuut • Indexeringondersteuntookingewikkeldevormen van query processing • Indexeringondersteunt primary key en uniqueness constraints
Indexering: hoe doe je dat? Twee fundamenteletechnieken • Zoekboom • Hash index Beideprincipestoepasbaarvoorzowel main memory als harddisk
Intermezzo • Voeg toe: 2 18 9 5 • Hoeveel knopen passen in de boom bij hoogte 10? • Hoeveel knopen passen in de boom bij hoogte N? • Hoeveel kost een zoekactie in een boom van grootte M doorgaans? • Voeg toe: 20 30 40 60 50
B-tree: karakteristieken • Veld: 4 byte integer • Pointer: 8 bytes • Block size: 8 kbyte • Vulling: 341 – 683 • 2 nivo’s: minimaal 116281 • 3 nivo’s: minimaal 39.651.621 • 4 nivo’s: minimaal13.521.270.961
Hash table • Reserveer 0..N buckets • Hashfunctief • Domein: allemogelijkeattribuutwaarden • Bereik: 0..N • Netjesverdeeld