IN2090 Databaser og datamodellering. 15 Indekser og Spørreprosessering

Like dokumenter
Enklere syntaks for joins. IN2090 Databaser og datamodellering. 09 Aggregering og sortering. Eksempel: Variable i delspørringer (1)

Repetisjon. IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT. Eksempler: FilmDB. Enkle SELECT-spørringer i et nøtteskall

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

Spørsmålskompilering del 2

Effektiv eksekvering av spørsmål

IN2090 Databaser og datamodellering 07 Datamanipulering

Komplisert eksempel. IN2090 Databaser og datamodellering 07 Datamanipulering. Flere eksempler: Kombinere aggregater. Komplisert eksempel med WITH

IN2090 Databaser og datamodellering. 08 Typer og skranker

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

IN2090 Databaser og datamodellering 07 Datamanipulering

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

IN2090 Databaser og datamodellering. 08 Typer og skranker

Problemer med Indre joins. Inner joins og manglende verdier med aggregater. Left Outer Join. Outer Joins. Hvor mange har kjøpt hvert produkt?

Datamodellering og databaser SQL, del 2

Spørsmålskompilering del 1

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

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

DBS18 - Strategier for Query-prosessering

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

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

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

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

Effektiv eksekvering av spørsmål

Spørsmålskompilering del 1

Effektiv eksekvering av spørsmål

Hvordan databasesystemene kan hjelpe RAM-produsentene

1. SQL datadefinisjon og manipulering

Spørsmålskompilering del 2

Effektiv eksekvering av spørsmål

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

Oppgave 1 (Opprett en database og en tabell)

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

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

INF1300 Introduksjon til databaser

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF1300 Introduksjon til databaser

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

Applikasjonsutvikling med databaser

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Integritetsregler i SQL. Primærnøkler

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Integritetsregler i SQL

Forelesning 3 DAS - Systemtabeller, indekser, distribuerte systemer m.m. - Tom Heine Nätt/Edgar Bostrøm

Repetisjon: Normalformer og SQL

INF1300 Introduksjon til databaser: SQL Structured Query Language

UNIVERSITETET I OSLO

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

Effektiv eksekvering av spørsmål

Spørsmålskompilering. Basert på foiler av Hector Garcia-Molina

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

En lett innføring i foreninger (JOINs) i SQL

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

Repetisjonsforelesning, SQL og utover

Metaspråket for å beskrive grammatikk

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

INF Algoritmer og datastrukturer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Spørsmålskompilering. Basert på foiler av Hector Garcia-Molina

Spørsmålskompilering

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

EKSAMEN 6102 / 6102N DATABASER

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

TDT4300 Datavarehus og datagruvedri3, Våren 2014

Romlig datamanipulering

INF3100 V2018 Obligatorisk oppgave nr. 2

1. Innføring i bruk av MySQL Query Browser

1. SQL spørringer mot flere tabeller

Andre sett obligatoriske oppgaver i INF3100 V2012

Tilkobling og Triggere

IN3020 V2019 Obligatorisk oppgave nr. 1

EKSAMEN DATABASER

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Integritetsregler i SQL

Eksamensoppgåve i TDT4145 Datamodellering og databasesystemer

Tildeling av minne til prosesser

ORDBMS og OODBMS i praksis

ITGK - H2010, Matlab. Dagens tema : Teori - Databaser

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004

5602 DATABASER Bokmål/nynorsk. 17 (inkludert denne forsiden) Eksamensresultatene blir offentliggjort på Studentweb.

UNIVERSITETET I OSLO

En liten rekap. Spørrespråk. I dag SELECT

Databaser fra et logikkperspektiv

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

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

Andre sett obligatoriske oppgaver iinf3100v2011

Oppgave 1 Datamodellering 25 %

Eksamen i IBE102 Webutvikling Våren 2017.

UNIVERSITETET I OSLO

Parallelle og distribuerte databaser del III

Sikkerhet og tilgangskontroll i RDBMS-er

Andre sett obligatoriske oppgaver i INF3100 V2013

Transkript:

IN2090 Databaser og datamodellering 15 Indekser og Spørreprosessering Leif Harald Karlsen leifhka@ifi.uio.no Universitetet i Oslo 1 / 22

Spørreprosessering: Oversikt 2 / 22

Spørreprosessering: Oversikt En spørring går gjennom flere steg før den til slutt blir evaluert over dataene 2 / 22

Spørreprosessering: Oversikt En spørring går gjennom flere steg før den til slutt blir evaluert over dataene Disse stegene sørger for at spørringen blir besvart så effektivt som mulig 2 / 22

Spørreprosessering: Oversikt En spørring går gjennom flere steg før den til slutt blir evaluert over dataene Disse stegene sørger for at spørringen blir besvart så effektivt som mulig Vi skal også se at vi av og til må be databasen lage datastrukturer for å effektivt kunne besvare enkelte spørringer 2 / 22

Fra SQL til relasjonell algebra 3 / 22

Fra SQL til relasjonell algebra Det første som skjer er at spørringen sjekkes syntaktisk (f.eks. tabellene og kolonnene finnes i databasen, typene er riktige, osv.) 3 / 22

Fra SQL til relasjonell algebra Det første som skjer er at spørringen sjekkes syntaktisk (f.eks. tabellene og kolonnene finnes i databasen, typene er riktige, osv.) Deretter oversettes spørringen til et spørre-tre over (en utvidet) relasjonell algebra 3 / 22

Oversettelse: Eksempel SELECT p. product_name, d. unit_price FROM categories AS c JOIN products AS p USING ( category_id) JOIN order_details AS d USING ( product_id) WHERE c. category_name = ' Beverages' AND d. discount >= 0.25; 4 / 22

Oversettelse: Eksempel SELECT p. product_name, d. unit_price FROM categories AS c JOIN products AS p USING ( category_id) JOIN order_details AS d USING ( product_id) WHERE c. category_name = ' Beverages' AND d. discount >= 0.25; π p.product_name,d.unit_price ( σ c.category_name= Beverages ( σ d.discount 0.25 ( categories category_id products product_id order_details ))) 4 / 22

Oversettelse: Eksempel π p.product_name,d.unit_price SELECT p. product_name, d. unit_price FROM categories AS c JOIN products AS p USING ( category_id) JOIN order_details AS d USING ( product_id) WHERE c. category_name = ' Beverages' AND d. discount >= 0.25; categories category_id σ c.category_name= Beverages σ d.discount 0.25 product_id order_details products π p.product_name,d.unit_price ( σ c.category_name= Beverages ( σ d.discount 0.25 ( categories category_id products product_id order_details ))) 4 / 22

Ulike spørringer Likt resultat 5 / 22

Ulike spørringer Likt resultat Spørringen uttrykt i relasjonell algebra kan manipuleres algebraisk 5 / 22

Ulike spørringer Likt resultat Spørringen uttrykt i relasjonell algebra kan manipuleres algebraisk Dette brukes for å genere forskjellige men ekvivalente spørringer 5 / 22

Ulike spørringer Likt resultat Spørringen uttrykt i relasjonell algebra kan manipuleres algebraisk Dette brukes for å genere forskjellige men ekvivalente spørringer Altså, spørringer som gir samme svar, men ser forskjellige ut 5 / 22

Ulike spørringer Likt resultat Spørringen uttrykt i relasjonell algebra kan manipuleres algebraisk Dette brukes for å genere forskjellige men ekvivalente spørringer Altså, spørringer som gir samme svar, men ser forskjellige ut Forskjellige spørringer kan ha ulik kompleksitet 5 / 22

Ulike spørringer Likt resultat Spørringen uttrykt i relasjonell algebra kan manipuleres algebraisk Dette brukes for å genere forskjellige men ekvivalente spørringer Altså, spørringer som gir samme svar, men ser forskjellige ut Forskjellige spørringer kan ha ulik kompleksitet De ulike spørringene skal så (i neste steg) bli tilordnet en ca. kostnad 5 / 22

Ulike spørringer Likt resultat Spørringen uttrykt i relasjonell algebra kan manipuleres algebraisk Dette brukes for å genere forskjellige men ekvivalente spørringer Altså, spørringer som gir samme svar, men ser forskjellige ut Forskjellige spørringer kan ha ulik kompleksitet De ulike spørringene skal så (i neste steg) bli tilordnet en ca. kostnad Vi vil så velge den spørringen som er billigst å eksekvere 5 / 22

Ulike spørringer: Eksempel π p.product_name,d.unit_price σ c.category_name= Beverages σ d.discount 0.25 product_id category_id order_details categories products 6 / 22

Ulike spørringer: Eksempel π p.product_name,d.unit_price π p.product_name,d.unit_price σ c.category_name= Beverages σ c.category_name= Beverages σ d.discount 0.25 σ d.discount 0.25 product_id category_id categories category_id products order_details categories order_details product_id products 6 / 22

Ulike spørringer: Eksempel π p.product_name,d.unit_price π p.product_name,d.unit_price σ c.category_name= Beverages σ c.category_name= Beverages σ d.discount 0.25 σ d.discount 0.25 product_id category_id categories category_id products order_details categories order_details product_id products π p.product_name,d.unit_price σ d.discount 0.25 product_id category_id order_details σ c.category_name= Beverages products categories 6 / 22

Ulike spørringer: Eksempel π p.product_name,d.unit_price π p.product_name,d.unit_price σ c.category_name= Beverages σ c.category_name= Beverages σ d.discount 0.25 σ d.discount 0.25 product_id category_id category_id order_details categories product_id categories products order_details products π p.product_name,d.unit_price π p.product_name,d.unit_price σ d.discount 0.25 product_id product_id category_id order_details category_id σ d.discount 0.25 σ c.category_name= Beverages products σ c.category_name= Beverages products order_details categories categories 6 / 22

Fra spørring til kostnad 7 / 22

Fra spørring til kostnad De ulike spørringene blir så tilordnet en kostnad 7 / 22

Fra spørring til kostnad De ulike spørringene blir så tilordnet en kostnad Kostnadsevalueringen bruker statistikk over databasen 7 / 22

Fra spørring til kostnad De ulike spørringene blir så tilordnet en kostnad Kostnadsevalueringen bruker statistikk over databasen F.eks. antall rader i hver tabell, antall ulike verdier i hver kolonne, osv. 7 / 22

Fra spørring til kostnad De ulike spørringene blir så tilordnet en kostnad Kostnadsevalueringen bruker statistikk over databasen F.eks. antall rader i hver tabell, antall ulike verdier i hver kolonne, osv. Bruker her også skranker (f.eks. UNIQUE, CHECK) 7 / 22

Fra spørring til kostnad De ulike spørringene blir så tilordnet en kostnad Kostnadsevalueringen bruker statistikk over databasen F.eks. antall rader i hver tabell, antall ulike verdier i hver kolonne, osv. Bruker her også skranker (f.eks. UNIQUE, CHECK) Høyere kostnad betyr lengre eksekveringstid 7 / 22

Fra spørring til kostnad De ulike spørringene blir så tilordnet en kostnad Kostnadsevalueringen bruker statistikk over databasen F.eks. antall rader i hver tabell, antall ulike verdier i hver kolonne, osv. Bruker her også skranker (f.eks. UNIQUE, CHECK) Høyere kostnad betyr lengre eksekveringstid Databasen velger så den spørringen med lavest kostnad 7 / 22

Spørreplaner 8 / 22

Spørreplaner Det siste som skjer i dette trinnet er at det blir laget en spørreplan for den valgte spørringen 8 / 22

Spørreplaner Det siste som skjer i dette trinnet er at det blir laget en spørreplan for den valgte spørringen Dette er en mer detaljert plan for hvordan spørringen skal eksekveres 8 / 22

EXPLAIN Av og til kan det være nyttig å få se denne spørreplanen 9 / 22

EXPLAIN Av og til kan det være nyttig å få se denne spørreplanen F.eks. dersom man lurer på hvordan spørringen vil bli eksekvert 9 / 22

EXPLAIN Av og til kan det være nyttig å få se denne spørreplanen F.eks. dersom man lurer på hvordan spørringen vil bli eksekvert Eller dersom man ønsker et ca. estimat på hvor komplisert spørringen blir å eksekvere 9 / 22

EXPLAIN Av og til kan det være nyttig å få se denne spørreplanen F.eks. dersom man lurer på hvordan spørringen vil bli eksekvert Eller dersom man ønsker et ca. estimat på hvor komplisert spørringen blir å eksekvere Dette kan gjøres ved å skrive EXPLAIN foran spørringen 9 / 22

EXPLAIN Av og til kan det være nyttig å få se denne spørreplanen F.eks. dersom man lurer på hvordan spørringen vil bli eksekvert Eller dersom man ønsker et ca. estimat på hvor komplisert spørringen blir å eksekvere Dette kan gjøres ved å skrive EXPLAIN foran spørringen Spørringen blir da ikke eksekvert 9 / 22

EXPLAIN Av og til kan det være nyttig å få se denne spørreplanen F.eks. dersom man lurer på hvordan spørringen vil bli eksekvert Eller dersom man ønsker et ca. estimat på hvor komplisert spørringen blir å eksekvere Dette kan gjøres ved å skrive EXPLAIN foran spørringen Spørringen blir da ikke eksekvert (Merk: Ikke pensum å kunne forstå spørreplaner!) 9 / 22

EXPLAIN: Eksempel psql=> EXPLAIN SELECT p.product_name, d.unit_price FROM categories AS c JOIN products AS p USING (category_id) JOIN order_details AS d USING (product_id) WHERE c.category_name = 'Beverages' AND d.discount >= 0.25; QUERY PLAN ------------------------------------------------------------------------------------ Hash Join (cost=3.32..43.04 rows=20 width=21) Hash Cond: (d.product_id = p.product_id) -> Seq Scan on order_details d (cost=0.00..38.94 rows=154 width=6) Filter: (discount >= '0.25':: double precision) -> Hash (cost=3.20..3.20 rows=10 width=19) -> Hash Join (cost=1.11..3.20 rows=10 width=19) Hash Cond: (p.category_id = c.category_id) -> Seq Scan on products p (cost=0.00..1.77 rows=77 width=21) -> Hash (cost=1.10..1.10 rows=1 width=2) -> Seq Scan on categories c (cost=0.00..1.10 rows=1 width=2) Filter: (( category_name):: text = 'Beverages'::text) (11 rows) 10 / 22

Evaluering 11 / 22

Evaluering Til slutt evalueres spørringen over databasen 11 / 22

Evaluering Til slutt evalueres spørringen over databasen Databasen har så svært effektive algoritmer for joins, oppslag, sorteing, osv. 11 / 22

Evaluering Til slutt evalueres spørringen over databasen Databasen har så svært effektive algoritmer for joins, oppslag, sorteing, osv. Merk: Databasen trenger kun én algoritme per operator i den (utvidede) relasjonelle algebraen 11 / 22

ANALYZE Dersom vi ønsker å vite hvor lang tid en spørring faktisk tar å eksekvere, samt detaljert analyse av hver del av spørreplanen kan vi bruke EXPLAIN ANALYZE 12 / 22

ANALYZE Dersom vi ønsker å vite hvor lang tid en spørring faktisk tar å eksekvere, samt detaljert analyse av hver del av spørreplanen kan vi bruke EXPLAIN ANALYZE Får da også informasjon om minnebruk 12 / 22

ANALYZE Dersom vi ønsker å vite hvor lang tid en spørring faktisk tar å eksekvere, samt detaljert analyse av hver del av spørreplanen kan vi bruke EXPLAIN ANALYZE Får da også informasjon om minnebruk Da vil spørringen bli eksekvert, og databasen samler så nøyaktig informasjon om eksekveringen 12 / 22

ANALYZE Dersom vi ønsker å vite hvor lang tid en spørring faktisk tar å eksekvere, samt detaljert analyse av hver del av spørreplanen kan vi bruke EXPLAIN ANALYZE Får da også informasjon om minnebruk Da vil spørringen bli eksekvert, og databasen samler så nøyaktig informasjon om eksekveringen Dersom en spørring tar lang tid kan dette brukes for å finne ut hvilken del av spørringen som er komplisert 12 / 22

ANALYZE Dersom vi ønsker å vite hvor lang tid en spørring faktisk tar å eksekvere, samt detaljert analyse av hver del av spørreplanen kan vi bruke EXPLAIN ANALYZE Får da også informasjon om minnebruk Da vil spørringen bli eksekvert, og databasen samler så nøyaktig informasjon om eksekveringen Dersom en spørring tar lang tid kan dette brukes for å finne ut hvilken del av spørringen som er komplisert Kan også brukes for å finne manglende indeksstrukturer (mer om dette straks) 12 / 22

ANALYZE: Eksempel psql=> EXPLAIN ANALYZE SELECT p.product_name, d.unit_price FROM categories AS c JOIN products AS p USING (category_id) JOIN order_details AS d USING (product_id) WHERE c.category_name = 'Beverages' AND d.discount >= 0.25; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Hash Join (cost=3.32..43.04 rows=20 width=21) (actual time=0.130..1.066 rows=32 loops=1) Hash Cond: (d.product_id = p.product_id) -> Seq Scan on order_details d (cost=0.00..38.94 rows=154 width=6) (actual time=0.031..0.887 rows=154 loops=1) Filter: (discount >= '0.25'::double precision) Rows Removed by Filter: 2001 -> Hash (cost=3.20..3.20 rows=10 width=19) (actual time=0.085..0.085 rows=12 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Hash Join (cost=1.11..3.20 rows=10 width=19) (actual time=0.034..0.077 rows=12 loops=1) Hash Cond: (p.category_id = c.category_id) -> Seq Scan on products p (cost=0.00..1.77 rows=77 width=21) (actual time=0.008..0.022 rows=77 loops=1) -> Hash (cost=1.10..1.10 rows=1 width=2) (actual time=0.016..0.016 rows=1 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on categories c (cost=0.00..1.10 rows=1 width=2) (actual time=0.008..0.012 rows=1 loops=1) Filter: ((category_name)::text = 'Beverages'::text) Rows Removed by Filter: 7 Planning Time: 0.567 ms Execution Time: 1.146 ms (17 rows) 13 / 22

Spørringer og kompleksitet Hvordan utfører en database et oppslag på en bestem verdi? 14 / 22

Spørringer og kompleksitet Hvordan utfører en database et oppslag på en bestem verdi? Eller en join mellom to tabeller? 14 / 22

Spørringer og kompleksitet Hvordan utfører en database et oppslag på en bestem verdi? Eller en join mellom to tabeller? Begge disse problemene er egentlig et søk etter bestemte verdier i en kolonne 14 / 22

Spørringer og kompleksitet Hvordan utfører en database et oppslag på en bestem verdi? Eller en join mellom to tabeller? Begge disse problemene er egentlig et søk etter bestemte verdier i en kolonne For at databasen skal kunne utføre disse operasjonene effektivt (spesielt over veldig store tabeller) trenger vi datastrukturer som gjør søket mer effektivt 14 / 22

Spørringer og kompleksitet Hvordan utfører en database et oppslag på en bestem verdi? Eller en join mellom to tabeller? Begge disse problemene er egentlig et søk etter bestemte verdier i en kolonne For at databasen skal kunne utføre disse operasjonene effektivt (spesielt over veldig store tabeller) trenger vi datastrukturer som gjør søket mer effektivt Slike datastrukturer heter indeksstrukturer 14 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner 15 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner Har to hovedtyper indekser: Hash-baserte og tre-baserte 15 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner Har to hovedtyper indekser: Hash-baserte og tre-baserte Databaseindekser skiller seg litt fra andre datastrukturer fordi de ikke lagres i minne, men på disk 15 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner Har to hovedtyper indekser: Hash-baserte og tre-baserte Databaseindekser skiller seg litt fra andre datastrukturer fordi de ikke lagres i minne, men på disk Å lese fra disk tar ca. 10,000 ganger lengre tid enn fra RAM (avhenig av disktype og minnetype) 15 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner Har to hovedtyper indekser: Hash-baserte og tre-baserte Databaseindekser skiller seg litt fra andre datastrukturer fordi de ikke lagres i minne, men på disk Å lese fra disk tar ca. 10,000 ganger lengre tid enn fra RAM (avhenig av disktype og minnetype) Se f.eks. https://gist.github.com/hellerbarde/2843375 15 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner Har to hovedtyper indekser: Hash-baserte og tre-baserte Databaseindekser skiller seg litt fra andre datastrukturer fordi de ikke lagres i minne, men på disk Å lese fra disk tar ca. 10,000 ganger lengre tid enn fra RAM (avhenig av disktype og minnetype) Se f.eks. https://gist.github.com/hellerbarde/2843375 De er derfor optimert for å utføre så få diskoppslag som mulig 15 / 22

Indeksstrukturer En indeksstruktur er en datastruktur som lar databasen hurtig finne bestemte rader i en tabell, basert på verdiene i en (eller flere) kolonner Har to hovedtyper indekser: Hash-baserte og tre-baserte Databaseindekser skiller seg litt fra andre datastrukturer fordi de ikke lagres i minne, men på disk Å lese fra disk tar ca. 10,000 ganger lengre tid enn fra RAM (avhenig av disktype og minnetype) Se f.eks. https://gist.github.com/hellerbarde/2843375 De er derfor optimert for å utføre så få diskoppslag som mulig Databasen finner selv ut når indeksen bør brukes 15 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 16 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 Trestruktur hvor hver node kan ha mange barn 16 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 Trestruktur hvor hver node kan ha mange barn Nodene har samme størrelse som en disk-blokk 16 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 Trestruktur hvor hver node kan ha mange barn Nodene har samme størrelse som en disk-blokk Minimerer antall oppslag på disk 16 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 Trestruktur hvor hver node kan ha mange barn Nodene har samme størrelse som en disk-blokk Minimerer antall oppslag på disk Hver verdi i løvnodene har pekere til dens tilhørende rad i den tilhørende tabellen 16 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 Trestruktur hvor hver node kan ha mange barn Nodene har samme størrelse som en disk-blokk Minimerer antall oppslag på disk Hver verdi i løvnodene har pekere til dens tilhørende rad i den tilhørende tabellen Kan utføre effektive oppslag på konkrete verdier 16 / 22

B-tre-indekser 42 7 21 61 74 85 95 2 5 10 17 20 35 41 47 49 53 65 68 72 77 81 87 90 91 94 97 99 Trestruktur hvor hver node kan ha mange barn Nodene har samme størrelse som en disk-blokk Minimerer antall oppslag på disk Hver verdi i løvnodene har pekere til dens tilhørende rad i den tilhørende tabellen Kan utføre effektive oppslag på konkrete verdier Samt effektive intervall søk 16 / 22

Hash-indekser En hash-indeks bruker en hash-funksjon for å oversette en verdi til en minneadresse 17 / 22

Hash-indekser En hash-indeks bruker en hash-funksjon for å oversette en verdi til en minneadresse På minneadressen ligger så en liste med pekere til rader som har denne verdien 17 / 22

Hash-indekser En hash-indeks bruker en hash-funksjon for å oversette en verdi til en minneadresse På minneadressen ligger så en liste med pekere til rader som har denne verdien Hash-indekser er mer effektive på oppslag på konkrete verdier 17 / 22

Hash-indekser En hash-indeks bruker en hash-funksjon for å oversette en verdi til en minneadresse På minneadressen ligger så en liste med pekere til rader som har denne verdien Hash-indekser er mer effektive på oppslag på konkrete verdier Men kan ikke brukes for intervaller (må da gjøre ett oppslag for hver mulige verdi i intervallet) 17 / 22

Andre indeksstrukturer Det finnes mange andre indeksstrukturer 18 / 22

Andre indeksstrukturer Det finnes mange andre indeksstrukturer Ulike strukturer er tilpassed ulike datatyper 18 / 22

Andre indeksstrukturer Det finnes mange andre indeksstrukturer Ulike strukturer er tilpassed ulike datatyper Egne strukturer for f.eks.: 18 / 22

Andre indeksstrukturer Det finnes mange andre indeksstrukturer Ulike strukturer er tilpassed ulike datatyper Egne strukturer for f.eks.: Søk i tekst 18 / 22

Andre indeksstrukturer Det finnes mange andre indeksstrukturer Ulike strukturer er tilpassed ulike datatyper Egne strukturer for f.eks.: Søk i tekst Romlige data og koordinater i høyere dimensjoner 18 / 22

Andre indeksstrukturer Det finnes mange andre indeksstrukturer Ulike strukturer er tilpassed ulike datatyper Egne strukturer for f.eks.: Søk i tekst Romlige data og koordinater i høyere dimensjoner Sammensatte strukturer (JSON, XML, osv.) 18 / 22

Nøkler og indekser Når man markerer en kolonne med PRIMARY KEY blir det automatisk opprettet en B-tre-indeks på denne kolonnen 19 / 22

Nøkler og indekser Når man markerer en kolonne med PRIMARY KEY blir det automatisk opprettet en B-tre-indeks på denne kolonnen Joins over primærnøkler er derfor alltid relativt effektive 19 / 22

Nøkler og indekser Når man markerer en kolonne med PRIMARY KEY blir det automatisk opprettet en B-tre-indeks på denne kolonnen Joins over primærnøkler er derfor alltid relativt effektive Men, det kan hende man ønsker å gjøre søk, oppslag eller joins over kolonner som ikke er primærnøkler 19 / 22

Nøkler og indekser Når man markerer en kolonne med PRIMARY KEY blir det automatisk opprettet en B-tre-indeks på denne kolonnen Joins over primærnøkler er derfor alltid relativt effektive Men, det kan hende man ønsker å gjøre søk, oppslag eller joins over kolonner som ikke er primærnøkler Vi må da lage indeksene selv 19 / 22

Lage indekser med SQL For å lade en indeks på en kolonne trenger man bare å skrive CREATE INDEX <index_name > ON <table >( < columns >); hvor <index_name> er navnet på indeksen, <table> er et tabellnavn og <columns> er en liste med kolonner man ønsker å indeksere 20 / 22

Lage indekser med SQL For å lade en indeks på en kolonne trenger man bare å skrive CREATE INDEX <index_name > ON <table >( < columns >); hvor <index_name> er navnet på indeksen, <table> er et tabellnavn og <columns> er en liste med kolonner man ønsker å indeksere Databasen lager da en passende indeks (typisk B-tre) 20 / 22

Lage indekser med SQL For å lade en indeks på en kolonne trenger man bare å skrive CREATE INDEX <index_name > ON <table >( < columns >); hvor <index_name> er navnet på indeksen, <table> er et tabellnavn og <columns> er en liste med kolonner man ønsker å indeksere Databasen lager da en passende indeks (typisk B-tre) F.eks.: CREATE INDEX price_index ON products( unit_price); 20 / 22

Lage indekser med SQL For å lade en indeks på en kolonne trenger man bare å skrive CREATE INDEX <index_name > ON <table >( < columns >); hvor <index_name> er navnet på indeksen, <table> er et tabellnavn og <columns> er en liste med kolonner man ønsker å indeksere Databasen lager da en passende indeks (typisk B-tre) F.eks.: CREATE INDEX price_index ON products( unit_price); Merk: Dersom man lister opp flere kolonner blir indeksen over alle kolonnene samtidig 20 / 22

Relasjonelle databasers sukksess Spørringene vi skriver er deklarative 21 / 22

Relasjonelle databasers sukksess Spørringene vi skriver er deklarative De uttrykker hva ikke hvordan 21 / 22

Relasjonelle databasers sukksess Spørringene vi skriver er deklarative De uttrykker hva ikke hvordan Databasen bruker algebra og statistikk for å finne den mest effektive måten å eksekvere spørringen på 21 / 22

Relasjonelle databasers sukksess Spørringene vi skriver er deklarative De uttrykker hva ikke hvordan Databasen bruker algebra og statistikk for å finne den mest effektive måten å eksekvere spørringen på Den samme spørringen kan altså bli eksekvert på forskjellige måter dersom dataene endrer seg 21 / 22

Relasjonelle databasers sukksess Spørringene vi skriver er deklarative De uttrykker hva ikke hvordan Databasen bruker algebra og statistikk for å finne den mest effektive måten å eksekvere spørringen på Den samme spørringen kan altså bli eksekvert på forskjellige måter dersom dataene endrer seg Relasjonelle databaser er et felt som kombinerer avansert teori (algebra, logikk, statistikk) med sofistikerte algoritmer og data strukturer 21 / 22

Hva bør repeteres? Menti 22 / 22