- Indexering wordt gebruikt om de prestaties van een database te optimaliseren door het aantal vereiste schijftoegangen te minimaliseren wanneer een query wordt verwerkt.
- De index is een soort gegevensstructuur. Het wordt gebruikt om de gegevens in een databasetabel snel te lokaliseren en te openen.
Indexstructuur:
Indexen kunnen worden gemaakt met behulp van bepaalde databasekolommen.
- De eerste kolom van de database is de zoeksleutel die een kopie bevat van de primaire sleutel of kandidaatsleutel van de tabel. De waarden van de primaire sleutel worden in gesorteerde volgorde opgeslagen, zodat de bijbehorende gegevens gemakkelijk toegankelijk zijn.
- De tweede kolom van de database is de gegevensreferentie. Het bevat een reeks verwijzingen die het adres van het schijfblok bevatten waar de waarde van de specifieke sleutel kan worden gevonden.
Indexeringsmethoden
Bestelde indexen
De indexen zijn meestal gesorteerd om het zoeken sneller te maken. De gesorteerde indices staan bekend als geordende indices.
Voorbeeld : Stel dat we een werknemerstabel hebben met duizenden records en elk daarvan is 10 bytes lang. Als hun ID begint met 1, 2, 3... enzovoort, moeten we de student zoeken met ID-543.
- In het geval van een database zonder index moeten we het schijfblok doorzoeken vanaf het begin totdat het 543 bereikt. Het DBMS zal het record lezen na het lezen van 543*10=5430 bytes.
- In het geval van een index zullen we zoeken met behulp van indexen en zal het DBMS het record lezen na het lezen van 542*2= 1084 bytes, wat veel minder is vergeleken met het vorige geval.
Primaire index
- Als de index wordt gemaakt op basis van de primaire sleutel van de tabel, wordt dit primaire indexering genoemd. Deze primaire sleutels zijn uniek voor elke record en bevatten een 1:1-relatie tussen de records.
- Omdat primaire sleutels in gesorteerde volgorde worden opgeslagen, is de prestatie van de zoekbewerking behoorlijk efficiënt.
- De primaire index kan in twee typen worden ingedeeld: dichte index en spaarzame index.
Dichte index
- De dichte index bevat een indexrecord voor elke zoeksleutelwaarde in het gegevensbestand. Het maakt het zoeken sneller.
- Hierbij is het aantal records in de indextabel hetzelfde als het aantal records in de hoofdtabel.
- Het heeft meer ruimte nodig om het indexrecord zelf op te slaan. De indexrecords hebben de zoeksleutel en een verwijzing naar het daadwerkelijke record op de schijf.
Schaarse index
- In het gegevensbestand verschijnt slechts voor een paar items een indexrecord. Elk item verwijst naar een blok.
- Hierbij verwijst de index, in plaats van naar elke record in de hoofdtabel te verwijzen, naar de records in de hoofdtabel in een tussenruimte.
Clusteringindex
- Een geclusterde index kan worden gedefinieerd als een geordend gegevensbestand. Soms wordt de index gemaakt op niet-primaire sleutelkolommen, die mogelijk niet uniek zijn voor elk record.
- Om de record sneller te identificeren, zullen we in dit geval twee of meer kolommen groeperen om de unieke waarde te verkrijgen en er een index van te maken. Deze methode wordt een clusterindex genoemd.
- De records met vergelijkbare kenmerken worden gegroepeerd en voor deze groepen worden indexen gemaakt.
Voorbeeld : stel dat een bedrijf op elke afdeling meerdere werknemers heeft. Stel dat we een clusterindex gebruiken, waarbij alle werknemers die tot dezelfde Dept_ID behoren binnen één cluster worden beschouwd, en indexwijzers naar het cluster als geheel verwijzen. Hier is Dept_Id een niet-unieke sleutel.
Het vorige schema is weinig verwarrend omdat één schijfblok wordt gedeeld door records die tot de verschillende clusters behoren. Als we afzonderlijke schijfblokken gebruiken voor afzonderlijke clusters, wordt dit een betere techniek genoemd.
Secundaire index
Bij spaarzame indexering groeit naarmate de omvang van de tabel groter wordt, ook de omvang van de mapping. Deze toewijzingen worden meestal in het primaire geheugen bewaard, zodat het ophalen van adressen sneller zou moeten zijn. Vervolgens zoekt het secundaire geheugen naar de daadwerkelijke gegevens op basis van het adres dat is verkregen uit de mapping. Als de mappinggrootte groter wordt, wordt het ophalen van het adres zelf langzamer. In dit geval zal de spaarzame index niet efficiënt zijn. Om dit probleem te ondervangen, wordt secundaire indexering geïntroduceerd.
Om de omvang van de mapping te verkleinen, wordt bij secundaire indexering een ander indexeringsniveau geïntroduceerd. Bij deze methode wordt aanvankelijk het enorme bereik voor de kolommen geselecteerd, zodat de mappinggrootte van het eerste niveau klein wordt. Vervolgens wordt elk bereik verder onderverdeeld in kleinere bereiken. De mapping van het eerste niveau wordt opgeslagen in het primaire geheugen, zodat het ophalen van adressen sneller gaat. De mapping van het tweede niveau en de feitelijke gegevens worden opgeslagen in het secundaire geheugen (harde schijf).
Bijvoorbeeld:
- Als u het record van rol 111 in het diagram wilt vinden, wordt gezocht naar de hoogste invoer die kleiner is dan of gelijk is aan 111 in de index van het eerste niveau. Op dit niveau wordt het 100.
- Vervolgens doet het op het tweede indexniveau opnieuw max (111)<= 111 and gets 110. now using the address 110, it goes to data block starts searching each record till 111. < li>
- Zo wordt er bij deze methode gezocht. Ook het invoegen, bijwerken of verwijderen gebeurt op dezelfde manier. =>