logo

Indexeren in databases – Set 1

Indexering verbetert de databaseprestaties door het aantal schijfbezoeken dat nodig is om aan een zoekopdracht te voldoen, te minimaliseren. Het is een datastructuurtechniek die wordt gebruikt om gegevens in databases te lokaliseren en er snel toegang toe te krijgen. Er worden verschillende databasevelden gebruikt om indexen te genereren. De hoofdsleutel of kandidaatsleutel van de tabel wordt gedupliceerd in de eerste kolom, de zoeksleutel. Om het ophalen van gegevens te versnellen, worden de waarden ook in gesorteerde volgorde bewaard. Er moet worden benadrukt dat het sorteren van de gegevens niet vereist is. De tweede kolom is de Data Reference of Pointer die een reeks pointers bevat die het adres bevatten van het schijfblok waar die specifieke sleutelwaarde kan worden gevonden.

Structuur van index in database

Kenmerken van indexering

  • Toegangstypen: Dit verwijst naar het type toegang, zoals op waarden gebaseerd zoeken, bereiktoegang, enz.
  • Toegangstijd: Het verwijst naar de tijd die nodig is om een ​​bepaald gegevenselement of een reeks elementen te vinden.
  • Invoegtijd: Het verwijst naar de tijd die nodig is om de juiste ruimte te vinden en nieuwe gegevens in te voegen.
  • Verwijderingstijd: De tijd die nodig is om een ​​item te vinden en te verwijderen, en om de indexstructuur bij te werken.
  • Ruimte boven het hoofd: Het verwijst naar de extra ruimte die de index nodig heeft.

Structuur van index in database



dharmendra-leeftijd

Over het algemeen zijn er twee soorten mechanismen voor bestandsorganisatie die worden gevolgd door de indexeringsmethoden om de gegevens op te slaan:

Sequentiële bestandsorganisatie of geordend indexbestand

Hierbij zijn de indices gebaseerd op een gesorteerde volgorde van de waarden. Deze zijn over het algemeen snel en een meer traditioneel type opslagmechanisme. Deze geordende of sequentiële bestandsorganisaties kunnen de gegevens opslaan in een compact of schaars formaat.

  • Dichte index
    • Voor elke zoeksleutelwaarde in het gegevensbestand is er een indexrecord.
    • Dit record bevat de zoeksleutel en tevens een verwijzing naar het eerste gegevensrecord met die zoeksleutelwaarde.

Dichte index

  • Schaarse index
    • Het indexrecord verschijnt slechts voor een paar items in het gegevensbestand. Elk item verwijst naar een blok, zoals weergegeven.
    • Om een ​​record te lokaliseren, vinden we het indexrecord met de grootste zoeksleutelwaarde kleiner dan of gelijk aan de zoeksleutelwaarde waarnaar we op zoek zijn.
    • We beginnen bij dat record waarnaar wordt verwezen door het indexrecord, en gaan verder met de verwijzingen in het bestand (dat wil zeggen opeenvolgend) totdat we het gewenste record vinden.
    • Aantal vereiste toegangen=log₂(n)+1, (hier n=aantal blokken verkregen door indexbestand)

Schaarse index

Hash-bestandsorganisatie

Indices zijn gebaseerd op het feit dat de waarden uniform over een reeks segmenten zijn verdeeld. De buckets waaraan een waarde wordt toegewezen, worden bepaald door een functie die een hashfunctie wordt genoemd. Er zijn grofweg drie methoden voor indexering:

Python is numeriek
  • Geclusterde indexering : Wanneer er meer dan twee records in hetzelfde bestand zijn opgeslagen, wordt dit type opslag clusterindexering genoemd. Door gebruik te maken van clusterindexering kunnen we de kosten van het zoeken verlagen, omdat meerdere records die verband houden met hetzelfde onderwerp op één plek worden opgeslagen en het ook de frequente samenvoeging van meer dan twee tabellen (records) mogelijk maakt.
    De clusterindex wordt gedefinieerd in een geordend gegevensbestand. Het gegevensbestand is geordend op een niet-sleutelveld. In sommige gevallen wordt de index gemaakt op niet-primaire sleutelkolommen, die mogelijk niet uniek zijn voor elke record. Om de records sneller te kunnen identificeren, zullen we in dergelijke gevallen twee of meer kolommen groeperen om de unieke waarden te verkrijgen en er een index van te maken. Deze methode staat bekend als de clusteringindex. In wezen worden records met vergelijkbare eigenschappen gegroepeerd en worden er indexen voor deze groeperingen gevormd.
    Studenten die elk semester studeren, worden bijvoorbeeld bij elkaar gegroepeerd. Studenten uit het eerste semester, studenten uit het tweede semester, studenten uit het derde semester, enzovoort, worden gecategoriseerd.

Geclusterde indexering

  • Primaire indexering: Dit is een soort geclusterde indexering waarbij de gegevens worden gesorteerd op basis van de zoeksleutel en de primaire sleutel van de databasetabel wordt gebruikt om de index te maken. Het is een standaardformaat voor indexering waar het induceert sequentiële bestandsorganisatie . Omdat primaire sleutels uniek zijn en op een gesorteerde manier worden opgeslagen, is de prestatie van de zoekoperatie behoorlijk efficiënt.
  • Niet-geclusterde of secundaire indexering : Een niet-geclusterde index vertelt ons alleen waar de gegevens zich bevinden, d.w.z. het geeft ons een lijst met virtuele verwijzingen of verwijzingen naar de locatie waar de gegevens daadwerkelijk zijn opgeslagen. Gegevens worden niet fysiek opgeslagen in de volgorde van de index. In plaats daarvan zijn gegevens aanwezig in bladknooppunten. Voor bijv. de inhoudspagina van een boek. Elke invoer geeft ons het paginanummer of de locatie van de opgeslagen informatie. De feitelijke gegevens hier (informatie op elke pagina van het boek) zijn niet georganiseerd, maar we hebben een geordende verwijzing (inhoudspagina) naar waar de gegevenspunten feitelijk liggen. We kunnen alleen een dichte ordening hebben in de niet-geclusterde index, omdat een beperkte ordening niet mogelijk is omdat de gegevens niet fysiek dienovereenkomstig zijn georganiseerd.
    Het vereist meer tijd in vergelijking met de geclusterde index, omdat er wat extra werk wordt gedaan om de gegevens te extraheren door de aanwijzer verder te volgen. In het geval van een geclusterde index zijn de gegevens direct vóór de index aanwezig.
Niet-geclusterde indexering

Niet-geclusterde indexering

uitzonderingen die Java afhandelen
  • Indexering op meerdere niveaus: Met de groei van de omvang van de database groeien ook de indices. Omdat de index in het hoofdgeheugen wordt opgeslagen, kan een index op één niveau te groot worden om op te slaan bij meerdere schijftoegangen. De indexering op meerdere niveaus verdeelt het hoofdblok in verschillende kleinere blokken, zodat deze in één blok kunnen worden opgeslagen. De buitenste blokken zijn verdeeld in binnenste blokken die op hun beurt naar de datablokken wijzen. Dit kan eenvoudig met minder overheadkosten in het hoofdgeheugen worden opgeslagen.

Indexering op meerdere niveaus

Voordelen van indexeren

  • Verbeterde queryprestaties: Door indexering kunnen gegevens sneller uit de database worden opgehaald. De database kan snel rijen ontdekken die overeenkomen met een specifieke waarde of verzameling waarden door een index voor een kolom te genereren, waardoor de hoeveelheid tijd die nodig is om een ​​zoekopdracht uit te voeren wordt geminimaliseerd.
  • Efficiënte gegevenstoegang: Indexering kan de efficiëntie van de gegevenstoegang verbeteren door de hoeveelheid schijf-I/O die nodig is om gegevens op te halen te verminderen. De database kan de gegevenspagina's voor vaak bezochte kolommen in het geheugen bijhouden door een index voor die kolommen te genereren, waardoor de noodzaak om van schijf te lezen afneemt.
  • Geoptimaliseerde gegevenssortering: Indexering kan ook de prestaties van sorteerbewerkingen verbeteren. Door een index te maken van de kolommen die voor het sorteren worden gebruikt, kan de database voorkomen dat de hele tabel wordt gesorteerd en in plaats daarvan alleen de relevante rijen worden gesorteerd.
  • Consistente gegevensprestaties: Indexering kan ervoor zorgen dat de database consistent presteert, zelfs als de hoeveelheid gegevens in de database toeneemt. Zonder indexering kan het langer duren voordat query's worden uitgevoerd naarmate het aantal rijen in de tabel groeit, terwijl de indexering een min of meer consistente snelheid handhaaft.
  • Door ervoor te zorgen dat alleen unieke waarden worden ingevoegd in kolommen die als uniek zijn geïndexeerd, kan indexering ook worden gebruikt om de integriteit van gegevens te garanderen. Hierdoor wordt voorkomen dat dubbele gegevens in de database worden opgeslagen, wat tot problemen kan leiden bij het uitvoeren van query's of rapporten.

Over het geheel genomen biedt indexering in databases aanzienlijke voordelen voor het verbeteren van de queryprestaties, efficiënte gegevenstoegang, geoptimaliseerde gegevenssortering, consistente gegevensprestaties en afgedwongen gegevensintegriteit

Nadelen van indexeren

  • Voor het indexeren is meer opslagruimte nodig om de indexgegevensstructuur vast te houden, waardoor de totale omvang van de database zou kunnen toenemen.
  • Verhoogde overhead voor databaseonderhoud: Indexen moeten worden onderhouden wanneer gegevens in de tabel worden toegevoegd, vernietigd of gewijzigd, waardoor er mogelijk overhead voor databaseonderhoud ontstaat.
  • Indexering kan de prestaties bij het invoegen en bijwerken verminderen, omdat de indexgegevensstructuur elke keer dat gegevens worden gewijzigd, moet worden bijgewerkt.
  • Het kiezen van een index kan lastig zijn: Het kan een uitdaging zijn om de juiste indexen te kiezen voor een specifieke vraag of toepassing en kan een gedetailleerd onderzoek van de gegevens en toegangspatronen vereisen.

Kenmerken van indexering

  • De ontwikkeling van datastructuren, zoals B-bomen of De belangrijkste kolommen voor het indexeren van kolommen worden geselecteerd op basis van hoe vaak ze worden gebruikt en het soort zoekopdrachten waaraan ze worden onderworpen. De kardinaliteit Er kan rekening worden gehouden met de selectiviteit en het unieke karakter van de indexkolommen.
  • Er zijn verschillende indextypen die door databases worden gebruikt, waaronder primaire, secundaire, geclusterde en niet-geclusterde indexen. Gebaseerd op de specifieke behoeften van het databasesysteem, biedt elke vorm van index voor- en nadelen.
  • Om het databasesysteem optimaal te laten functioneren, is periodiek indexonderhoud vereist. Afhankelijk van veranderingen in de gegevens en gebruikspatronen omvatten onderhoudswerkzaamheden het bouwen, bijwerken en verwijderen van indexen.
  • Bij het optimaliseren van databasequery's is indexering betrokken, wat essentieel is. De query-optimalisatie gebruikt de indexen om de beste uitvoeringsstrategie voor een bepaalde query te kiezen op basis van de kosten van toegang tot de gegevens en de selectiviteit van de indexeringskolommen.
  • Databases maken gebruik van een reeks indexeringsstrategieën, waaronder dekkingsindexen, alleen-indexscans en gedeeltelijke indexen. Deze technieken maximaliseren het gebruik van indexen voor bepaalde soorten zoekopdrachten en gegevenstoegang.
  • Wanneer niet-aaneengesloten datablokken in een index worden opgeslagen, kan dit leiden tot indexfragmentatie, waardoor de index minder effectief wordt. Regelmatig indexonderhoud, zoals defragmentatie en reorganisatie, kan afnemen fragmentatie .

Conclusie

Indexeren is een zeer nuttige techniek die helpt bij het optimaliseren van de zoektijd database vragen. De tabel met database-indexering bestaat uit een zoeksleutel en wijzer . Er zijn vier soorten indexering: primaire, secundaire clustering en meerwaardige indexering. Primaire indexering is onderverdeeld in twee typen: compact en schaars. Dichte indexering wordt gebruikt wanneer de indextabel records voor elke zoeksleutel bevat. Sparse indexering wordt gebruikt wanneer de indextabel niet voor elke record een zoeksleutel gebruikt. Gebruik van indexering op meerdere niveaus B+ Boom . Het belangrijkste doel van indexering is het bieden van betere prestaties bij het ophalen van gegevens.

Veelgestelde vragen over indexeren

Vraag 1: Wat is indexeren in databases?

Antwoord:

Java-kaart voorbeeld

Indexeren is in feite een techniek die helpt bij het verkorten van de zoektijd van een databasequery of die helpt bij het sneller toegang krijgen tot de database.

Vraag 2: Wat zijn de voorbeelden van indexeringsdatabases?

Antwoord:

Enkele veel voorkomende voorbeelden van indexeringsdatabases zijn Web of Science, DOAJ (Directory of Open Access Journals)

Voor meer details kunt u verwijzen naar Inleiding tot B+ Boom En Soorten sleutels in de database artikel.