Hej!
Vad syftar ett index till i en Oracle databas?
Tacksam åt en förklaring, vad använder jag ett index till?
Mvh,
Krille.
5 svar · 321 visningar · startad av Krille29
Hej!
Vad syftar ett index till i en Oracle databas?
Tacksam åt en förklaring, vad använder jag ett index till?
Mvh,
Krille.
Generellt sett, i databasvärlden, är ett index något som ser till att indexera data i din databas på kolumnbasis för att minska tiden det tar att läsa datat. Hur index fungerar i Oracle (eller ifall det ens är någon stor skillnad jämfört med andra) vågar jag inte svara på, men jag kan inte tänka mig att det skall vara någon större skillnad mot t.ex. MS SQLServer, som jag syftar på.
Jag skulle kunna orera ganska länge om exakt hur de fungerar (eller inte fungerar), men eftersom jag bara kan MS SQLServer's indexstruktur, så vet jag inte ifall det är applicerbart på Oracle. Antagligen inte, mer än att principen är densamma.
Alltså, ett index kan hjälpa dig att snabba upp datahämtning i din databas, om du sätter dem rätt och med måtta. Index har dock givetvis en nackdel också, och det är att indexerade tabeller (med fler än ett t.ex.) oftast tar längre tid att uppdatera (UPDATE, INSERT, DELETE), lite beroende på vilken typ av index du använder, då databasen antagligen behöver skriva om pekare och flytta data för att bibehålla indexets nytta.
Tänk på binära träd. Då kan man se det som att man står vid en nod i trädet, och vet att det man söker, kan endast hittas om man följer en av de två grenarna som utgår från noden. Följer man den grenen, når man en till nod där man står inför samma val på nytt. Så fortsätter man tills man når fram till den eftersökta posten. Eftersom man vid varje val har eliminerat stora delar av tabellen, slipper man kolla upp alla poster som finns för att avgöra när man träffar rätt. Alla eliminerade poster vet vi ju i alla fall att vi inte är ute efter.
Som OveRRidE påpekar, tar det längre tid att uppdatera tabellen när den är indexerad. Det beror på att det binära trädet måste peka mot även den nya posten, alternativt upphöra att peka mot den raderade posten. Alltså måste det binära trädet byggas om.
Det kan vara av intresse att veta att det inte bara är binära träd man använder för indexering. Man kan även använda några varianter som kallas quad-tree och r-tree. De har lite fler grenar att följa. Själv har jag bara sett de varianterna i samband med lagring av geografiska data. Då representerar noderna i trädet geografiska områden, och grenarna som går ner från noderna, går till mindre geografiska områden som helt innesluts i noden ovanför. Slutligen når man ner till detaljnivån, dvs posterna i tabellen. Oracle klarar både quad-tree och r-tree, men för de vanligaste tillämpningarna (alltså inte geodata) är det snarare binära träd det handlar om.
Vårt heliga tal är sju. Du kan inte vika en tjuga mer än sju gånger i sig själv, samma sak med ett blädderblocksblad, så och med en sökning i det binära trädet. Index har alltså ett värde i ordning och en adresspekare till den kompletta posten.
Snygg förklaring, UlfT! :)
Jag visste inte riktigt om jag vågade skriva om B-Tree's, då det lätt blir ganska krångligt. Men din jämförelse var klockren.
Vidare kan det tilläggas att det dessutom är skillnad på klustrade och oklustrade index.