Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Trestrukturer Hashliknende strukturer Bitmapindekser

Like dokumenter
Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Treliknende strukturer Hashliknende strukturer Bitmapindekser

Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Trestrukturer Hashliknende strukturer Bitmapindekser

UNIVERSITETET I OSLO. Indeksering. Hvordan finne et element raskt? Institutt for Informatikk. INF Ellen Munthe-Kaas

UNIVERSITETET. Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Hashliknende strukturer.

UNIVERSITETET. Indeksering. Hvordan finne et element raskt? Vera Goebel, Ellen Munthe-Kaas

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

Effektiv eksekvering av spørsmål

INF2220: Forelesning 2

Effektiv eksekvering av spørsmål

INF2220: Forelesning 3

INF2220: Forelesning 2

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

Effektiv eksekvering av spørsmål

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Hashing: Håndtering av kollisjoner

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Effektiv eksekvering av spørsmål

INF Algoritmer og datastrukturer

DBS18 - Strategier for Query-prosessering

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

INF2220: Forelesning 3

Spørsmålskompilering del 1

INF1020 Algoritmer og datastrukturer

Notater til INF2220 Eksamen

Spørsmålskompilering del 1

Normalisering. ER-modell

Flerveis søketrær og B-trær

Effektiv eksekvering av spørsmål

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

Parallelle og distribuerte databaser del III

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

... HASHING. Hashing. Hashtabeller. hash(x)

INF Algoritmer og datastrukturer

Lars Vidar Magnusson

Datastrukturer for rask søking

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

Spørsmålskompilering del 2

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

DBS16: Disklagring, filstrukturer, hashing

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

TDT4225 Lagring og behandling av store datamengder

Obligatorisk oppgave 1 INF1020 h2005

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

Hvordan databasesystemene kan hjelpe RAM-produsentene

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

Integritetsregler i SQL. Primærnøkler

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Kap 9 Tre Sist oppdatert 15.03

Oppgave 1 ER- og relasjonsmodell 10 %

Integritetsregler i SQL

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

IN Algoritmer og datastrukturer

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

Lars Vidar Magnusson

INF2220: Time 12 - Sortering

Repetisjonsforelesning, SQL og utover

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

INF Algoritmer og datastrukturer

Oppgave 1 Datamodellering 25 %

UNIVERSITETET I OSLO

Integritetsregler i SQL

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF Algoritmer og datastrukturer

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

INF1010 Hashing. Marit Nybakken 8. mars 2004

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

INF1010 siste begreper før oblig 2

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

GIB2 - Stikkord. Alexander Nossum I-IKT desember Kartografi 2

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

UNIVERSITETET I OSLO

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Datamodellering og databaser SQL, del 2

EKSAMENSOPPGAVE I TDT4145 DATAMODELLERING OG DATABASESYSTEMER. Faglig kontakt under eksamen: Svein Erik Bratsberg og Roger Midtstraum

Oppgave 1 Datamodellering 22 %

Eksamensoppgave i TDT4225 Lagring og behandling av store datamengder Kontinuasjonseksamen

Eksamensoppgave i TDT4225 Lagring og behandling av store datamengder

Definisjon av binært søketre

INF Algoritmer og datastrukturer

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Filsystemet fra innsiden

Et eksempel: Åtterspillet

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Grunnleggende Datastrukturer

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Pensum: fra boken (H-03)+ forelesninger

Transkript:

UNIVERSITETET I OSLO Indeksering Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Trestrukturer Hashliknende strukturer Bitmapindekser Institutt for Informatikk INF30 29.2.2016 Ellen Munthe-Kaas 1

Indekser En indeks på et attributt A er en datastruktur som gjør det lett å finne de elementene som har en bestemt verdi for A (søkenøkkelen). Indeksen er sortert på søkenøkkelen. For hver verdi av søkenøkkelen har indeksen en liste med pekere til de tilsvarende postene. Flere indekser på samme fil gir raskere søking økt kompleksitet endringer må også oppdatere indeksene økt lagerbehov INF30 29.2.2016 Ellen Munthe-Kaas 2

Ulike typer indekser Tett (dense) vs. tynn (sparse) Primærindeks Datafilen er sortert fysisk på søkenøkkelen Maks én datapost pr. søkenøkkelverdi Clusterindeks Datafilen er sortert fysisk på søkenøkkelen Tillatt med flere dataposter med samme søkenøkkelverdi Sekundærindeks Datafilen er ikke sortert etter den tilhørende søkenøkkelen INF30 29.2.2016 Ellen Munthe-Kaas 3

Indekser, oversikt Datafil sortert på søkenøkkelen ikke sortert på søkenøkkelen Søkenøkkelen er en kandidatnøkkel primærindeks tett eller tynn sekundærindeks tett Søkenøkkelen er ikke en kandidatnøkkel clusterindeks tett eller tynn sekundærindeks tett INF30 29.2.2016 Ellen Munthe-Kaas 4

Primærindeks: Tette og tynne indekser En tett indeks har ett oppslag for hver verdi av søkenøkkelen. En tynn indeks har ett oppslag for hver datablokk. 20 30 40 50 60 40 70 a b c... z 20... 30... 40... 50... 60... a b c... z 20... 30... 40... 50... 60... INF30 29.2.2016 Ellen Munthe-Kaas 5

Et lite regnestykke Anta at vi har 1.000.000 poster på 300B, 4B søkenøkkel, 4B pekere 4KB blokkstørrelse, snitt 5,6 ms for å hente en blokk 13,6 recorder pr. blokk, dvs. 76924 blokker med data 512 indekser pr. blokk, dvs. 1954 blokker for en tett indeks og 151 blokker for en tynn Uten indeks: 76924/2 = 38462 blokkaksesser i snitt, dette tar 38462 * 5,6 ms = 215,4 s Med tett indeks og binærsøk: log2(1954) + 1 = 11 + 1 = 12 blokkaksesser (maks), dette tar 12 * 5,6 ms = 67,2 ms 3205 ganger raskere enn uten indeks! Med tynn indeks og binærsøk: log2(151) + 1 = 8 + 1 = 9 blokkaksesser (maks), dette tar 9 * 5,6 ms = 50,4 ms 4272 ganger raskere enn uten indeks og 1,33 ganger raskere enn med tett indeks INF30 29.2.2016 Ellen Munthe-Kaas 6

Flernivåindekser En indeks kan oppta flere blokker. En flernivåindeks, dvs. en indeks på indeksen, kan øke effektiviteten. Fortsettelse av regnestykket: Trenger bare 1954 / 512 = 4 blokker for 2. nivå log2(4) + 1 + 1 = 2 + 1 + 1 = 4 blokkaksesser, dette tar 4 * 5,6 ms = 22,4 ms 2,25 ganger raskere enn en enkelt tynn indeks, 3 ganger raskere enn en tett indeks. Kan i prinsippet ha vilkårlig mange indekser. tynn 2. nivå 70 130 200 300 400 tett 1. nivå 20 30 40 50 60 70 80 90 0 1 120 a b c... z 20... 30... 40... 50... 60... 70... 80... 90... 0... 1 120... INF30 29.2.2016 Ellen Munthe-Kaas 7

Eksempel: Sletting ved tynn indeks Slett post med a = 60 Ingen endring nødvendig i indeksen. Slett post med a = 40 Den første posten i blokken er blitt oppdatert, så indeksen må også oppdateres. 50 40 70 0 130 160 a b c... z 20... 30... 50 40... 50... 60... 70... 80... 90... 0... 1 120... INF30 29.2.2016 Ellen Munthe-Kaas 8

Eksempel: Sletting ved tett indeks Slett post med a = 60 Slett post med a = 40 I mange tilfeller ønsker man å komprimere dataene i blokkene. Man kan også komprimere hele datasettet, men vanligvis beholdes noe ledig plass for fremtidig innsetting. 20 30 50 40 50 60 70 80 90 0 1 120 a b c... z 20... 30... 50 40... 50... 60... 70... 80... 90... 0... 1 120... INF30 29.2.2016 Ellen Munthe-Kaas 9

Eksempel: Innsetting ved tynn indeks Sett inn post med a = 60 Vi er heldige ledig plass der vi trenger det. Sett inn post med a = 25 Må flytte posten med a=30 til neste blokk for å lage plass. Den første posten i blokk to er endret, og indeksen må oppdateres. Merk: Kunne også satt inn en ny/overflytsblokk. 40 30 70 0 130 160 a b c... z 20... 30 25... 30 40... 60 40 60 70... 80... 90... 0... 1 120... INF30 29.2.2016 Ellen Munthe-Kaas

Eksempel: Innsetting ved tynn indeks Sett inn post med a = 95 Ikke plass sett inn overflyts- eller ny blokk Overflytsblokk: Trenger ikke gjøre noe i indeksen (har bare pekere til hovedblokkene). Ny blokk: Indeksen må oppdateres. Innsetting ved tette indekser gjøres på samme måte men indeksen må oppdateres hver gang. 40 70 0 95 0 a b c... z 20... 30... 40... 50 60 70... 80... 90... 0... 1 120... 95... INF30 29.2.2016 Ellen Munthe-Kaas 11

Clusterindekser - duplikate søkenøkler En clusterindeks kan brukes hvis filen er sortert selv om søkenøkkelen ikke er unik. Eksempel 1 tett indeks: Ett indeksfelt pr. post. Lett å finne poster og hvor mange som finnes av hver. Flere felt enn nødvendig? 20 30 30 40 40 a b c... z 20... 30... 30... 40... 40... INF30 29.2.2016 Ellen Munthe-Kaas 12

Clusterindekser: Eksempel tett indeks Bare ett indeksfelt pr. unike søkenøkkel. Mindre indeks raskt søk. Mer komplisert å finne påfølgende poster. 20 30 40 a b c... z 20... 30... 30... 40... 40... INF30 29.2.2016 Ellen Munthe-Kaas 13

Clusterindekser: Eksempel tynn indeks Indeksfeltene peker til første post i hver blokk Liten indeks raskt søk Vanskelig å finne poster. F.eks. finn alle poster med a = 30. 30 a b c... z 20... 30... 30... 40... 40... INF30 29.2.2016 Ellen Munthe-Kaas 14

Usorterte filer sekundærindekser Hvis filen er usortert (eller sortert på et annet attributt), kan man bruke en sekundærindeks. Sortert på søkenøkkelen raskt søk. 1. nivå er alltid tett høyere nivåer er tynne. Duplikater tillates. 30 20 20 30 30 30 30 30 a b c... z 30... 20... 30... 30... 30... 20... 30... INF30 29.2.2016 Ellen Munthe-Kaas 15

Tette versus tynne indekser tett tynn plass ett indeksfelt pr. post ett indeksfelt pr. datablokk blokkaksesser mange få postaksesser direkte aksess må lete innenfor datablokken existsspørringer bruk indeksen alene må alltid aksessere datablokken bruk overalt ikke på usorterte elementer endringer må alltid oppdateres hvis postrekkefølgen endres oppdateres bare hvis den første posten i en datablokk endres INF30 29.2.2016 Ellen Munthe-Kaas 16

Inverterte indekser Hva hvis man ønsker å søke på elementer innenfor ett attributt? select * from R where a like ʹ %cat%ʹ Søke etter dokumenter som inneholder visse nøkkelord, f.eks. søkemotorer som Google, Altavista, Excite, Lycos, AllTheWeb osv. INF30 29.2.2016 Ellen Munthe-Kaas 17

Invertert indeks Eksempel: computer disk laptop printer... connected the printer to the computer...... stored the file on the disk before sending it to the printer...... the laptop has a 50 GB disk... Navnet invertert indeks kommer fra følgende: Direkte indeks: Poster på formen (id1: dokument1), (id2: dokument2),... (slå opp på en id, får tilgang til dokumentet) Invertert indeks: Poster på formen (computer: [id1]), (disk: [id2, id3]),... (slå opp på et nøkkelord, får tilgang til alle relevante dokument-id er) INF30 29.2.2016 Ellen Munthe-Kaas 18

B + -trær Nodene er blokker. Alle løvnoder er på samme nivå. Hver node har n søkenøkler og n+1 pekere. Indre node: alle pekere er til subnoder. Løvnode: n datapekere og 1 nestepeker. Alle noder må inneholde en viss mengde søkenøkler/pekere Indre node: minst (n+1)/2 pekere til subnoder. Løvnode: minst (n+1)/2 datapekere. Eksempel (n=3): 1 2 7 11 23 11 17 23 25 a... 25... 23... 17... 11... 7... 2... 1... INF30 29.2.2016 Ellen Munthe-Kaas 19

B + -trær: effektivitet B + -trær: Et søk må alltid gå fra roten til en løvnode, dvs. antall blokkaksesser er lik høyden på treet pluss aksessering av selve postene (i datafilen). Antall nivåer er vanligvis svært lavt typisk 3. Intervallsøking går raskt. Ved stor n er det sjelden nødvendig å splitte/slå sammen noder. Disk I/O kan reduseres ved å holde noen av indeksblokkene i minnet. Eksempel: 4B søkenøkler, 8B pekere, 4KB blokker (ingen headere) Hvor mange verdier kan lagres i hver node? 4n + 8(n+1) 4096 n = 340 Nodene er i snitt 75% fulle. Hvor mange poster kan et B + -tre med 3 nivåer inneholde? (340 * 75 %) 3 = 16581375 16,6 millioner poster INF30 29.2.2016 Ellen Munthe-Kaas 20

Hashtabeller buckets Bruker en hashfunksjon fra søkenøkkelen til en arrayindeks med peker videre til hvilken bøtte (bucket) som eventuelt inneholder informasjon om den aktuelle posten. Hver bucket er en eller flere blokker Arraystørrelsen er vanligvis et primtall Viktig med en god hashfunksjon! Krav: Rask Eksempel: God fordeling av søkenøklene på bøttene Arraystørrelse B = 5 h(key) = mod(key, B) 0 1 2 3 4 arrayindeks i minnet 5 1 6 2 7 3 8 4 9 INF30 29.2.2016 Ellen Munthe-Kaas 21

Hashtabeller: effektivitet Ideelt er arraystørrelsen stor nok til at alle elementene for én hashverdi passer i én bucketblokk. Da får vi signifikant færre diskoperasjoner enn med vanlige indekser og B-trær Raskt søk etter spesifikk søkenøkkel Flere poster kan føre til flere blokker pr. bucket Dårlig på intervallsøk INF30 29.2.2016 Ellen Munthe-Kaas 22

Dynamiske hashtabeller Vanskelig å holde alle elementene for én hashverdi innenfor en bucketblokk hvis antall poster øker mens hashtabellen er statisk Dynamiske hashtabeller tillater arraystørrelsen å variere slik at det holder med én blokk pr. bucket. utvidbar (extensible) hashing lineær (linear) hashing INF30 29.2.2016 Ellen Munthe-Kaas 23

Sekvensielle vs hashindekser Sekvensielle indekser som f.eks. B-trær er gode på intervallsøk: select * from R where a > 5 Hashindekser er gode når det søkes etter en spesiell nøkkel: select * from R where a = 5 INF30 29.2.2016 Ellen Munthe-Kaas 24

Indekser i SQL Syntaks (DBMS-avhengig): create index name on relationname (attribute) create unique index name on relationname (attribute) drop index name Merk: Ikke alle DBMSer tillater at man angir type indeks, f.eks. B-tre, hashing osv. parametre som loadfaktor, hashstørrelse osv. INF30 29.2.2016 Ellen Munthe-Kaas 25

Spørringer med flere betingelser select... from R where a = 30 and b < 5 Strategi 1: Bruk en indeks, f.eks. på a. Finn og hent alle postene med a = 30. Søk gjennom disse postene for å finne poster med b < 5. Enkel strategi. Risikerer å lese mange unødvendige poster fra disk. INF30 29.2.2016 Ellen Munthe-Kaas 26

Flere betingelser: strategi 2 select c from R where a=30 and b=ʹ xʹ Bruk to tette indekser, en for a og en for b. Finn alle pekere til poster med a = 30. Finn alle pekere til poster med b = x. 20 30 a b c 30 z 1 x 2 20 y 1 x y z Sammenlign (snitt) pekerne og hent de aktuelle postene. Plukk ut de aktuelle attributtene. a-indeks buckets for a y 2 30 z 1 30 x 2 30 y 1 20 z 2 30 x 1 buckets for b INF30 29.2.2016 Ellen Munthe-Kaas 27 b-indeks

Flerdimensjonale indekser En flerdimensjonal indeks kombinerer flere dimensjoner i samme indeks. En enkel trelignende tilnærming: I 2 I 3 (key 1, key 2, key 3,...) I 2 I 1 I 3 I 2 I 3 INF30 29.2.2016 Ellen Munthe-Kaas 28

Flerdimensjonale indekser: eksempel Eksempel, tett indeks: select c from R where a=30 and b=ʹ xʹ Søkenøkkel = (30, x) Les a-dimensjonen. (30, x) a indeks 20 30 40... Søk etter 30, finn den tilsvarende indeksen for b-dimensjonen. Søk etter x, les tilsvarende diskblokk og hent posten. Velg ut de aktuelle attributtene. b indeks... x y... x y z... x y z z a b c 30 z 1 x 2 20 y 1 y 2 30 z 1 20 x 2 30 y 1 20 z 2 30 x 1 INF30 29.2.2016 Ellen Munthe-Kaas 29

Flerdimensjonale indekser For hvilke spørringer er dette en god indeks? Finn poster med a = and b = ʹ xʹ Finn poster med a = and b >= ʹ xʹ Finn poster med a = Finn poster med b = ʹ xʹ? Finn poster med a >= and b = ʹ xʹ Risikerer å måtte søke i mange indekser i neste dimensjon. Hadde vært bedre om dimensjonene endret rekkefølge. Det finnes mange andre tilnærminger... Andre trelignende strukturer Hashlignende strukturer Bitmapindekser INF30 29.2.2016 Ellen Munthe-Kaas 30 I a I b I b I b

Map View Vi kan betrakte en flerdimensjonal indeks med to dimensjoner som et geografisk kart: b b 3 b 5 b 2 b 1 b 4 a 1 a 2 a 3 a 4 Søking tilsvarer da å søke i kartet etter a punkter: a 1 og b 1 linjer: a 2 og <b 2,b 3 > arealer: <a 3,a 4 > og <b 4,b 5 > INF30 29.2.2016 Ellen Munthe-Kaas 31

Trestrukturer Det finnes mange trelignende strukturer som tilsvarer å lete etter kartarealer: kd-trær quad-trær R-trær Men alle disse må oppgi minst en av følgende egenskaper ved B-trær: Balansering alle løvnodene er på samme nivå. Korrespondanse mellom trenoder og diskblokker. Ytelse for oppdateringsoperasjoner. INF30 29.2.2016 Ellen Munthe-Kaas 32

R*-tre-topologi av postdistriktene i Tyskland R * -trær Idé: Grupper geometriske objekter som ligger nær hverandre. Nodene er blokker. Alle løvnoder er på samme nivå. Indre node: Det minste rektangelet som dekker alle objektene i subtreet Løvnode: Et objekt Alle indre noder må inneholde et visst antall pekere Søk (snitt, inneholdt i, nærmeste nabo) er enkelt Innsetting er utfordrende Treet skal holdes fullstendig balansert Rektangler bør ikke inneholde for mye tomrom Rektangler med felles foreldernode bør ikke overlappe for mye Kan måtte slette og gjeninnsette objekter for å få til bedre innplassering INF30 29.2.2016 Ellen Munthe-Kaas 33

Hash-lignende strukturer: gridfiler Gridfiler utvider tradisjonelle hashindekser til flere dimensjoner Hasher verdier for hvert attributt i en flerdimensjonal indeks. Hasher vanligvis ikke til enkeltverdier, men regioner h(key) = <x,y> Gridlinjer partisjonerer området i striper. b Eksempel (2 dimensjoner): Finn post med (a,b) = (22, 31) i h d b a h 1 (22) = <a x, a y > h 2 (31) = <b m, b n > h 2 (b-key) l f c post f k m g a h 1 (a-key) INF30 29.2.2016 Ellen Munthe-Kaas 34

Gridfiler Gridfiler kan raskt finne poster med key1 = V i and key2 = X j key1 = V i key2 = X j key1 >= V i and key2 < X j Gridfiler: Bra for søking ved flere nøkler. Bruker mye plass, krever en del organisering. INF30 29.2.2016 Ellen Munthe-Kaas 35

Bitmapindekser Utgangspunkt: Alle recorder er tilordnet et uforanderlig, entydig tall Nummering fra 1 til n Nummeret kan betraktes som en record-id og kan ikke gjenbrukes selv om recorden slettes Velg ut feltet F som det skal lages en indeks på For hver benyttet verdi v for F i en av recordene, opprett en bitvektor b v med lengde n Hvis record nr. i har F = v, la b v [i]=1 Hvis record nr. i har F v, la b v [i]=0 INF30 29.2.2016 Ellen Munthe-Kaas 36

Bitmapindekser: eksempel recordnummer fil F G H 30: bitvektorer for F 1 1 0 0 0 1 1 30 foo 65 40: 0 0 1 0 1 0 2 30 bar 43 50: 0 0 0 1 0 0 3 4 5 40 baz 84 50 fou 43 40 bar 65 bar: bitvektorer for G 0 1 0 0 1 0 6 30 baz 65 baz: 0 0 1 0 0 1 foo: 1 0 0 0 0 0 fou: 0 0 0 1 0 0 37

Karakteristika bitmapindekser Plassbehov: Totalt antall bits er #records * #verdier I verste fall trengs n 2 bits (men da har hver bitvektor bare én 1-bit) Bitvektorene kan komprimeres; det er aldri mer enn n 1-bits totalt i bitvektorene Effektiv for partial match queries (= angi verdier for noen felter, finn alle som har gitte verdier) Beregn bitvis and på tvers av bitmap-indeksene for de aktuelle attributtene range queries (= angi intervaller for noen felter, finn alle som har verdier innen intervallene) Beregn bitvis or innen intervallene INF30 29.2.2016 Ellen Munthe-Kaas 38