Hallo,


Hoe word de indexering geregeld in de database engine? Worden hier apart tabellen gemaakt of files waarin het per colom word geïndexeerd?
In de link heb ik een opzet gemaakt hoe ik denk dat geïndexeerd word, graag hoor ik of dit de mainier is of dat het heel anders werkt
codepen


Thanks alvast
Over welke database-engine heb je het? Bedoel je de achterliggende werking van MySQL, en hoe die alles op de schijf opslaat?

*.frm - Hier staan de tabel-defintiies in
*.myd - Hier staat de data van de tabellen in, waaruit je database bestaat.
*.myi - Hier staan de indexfiles van MyISAM in

Maar in de praktijk zul je hier niks mee hoeven te doen.

Het enige wat je moet doen is zelf een (bij sterke voorkeur, genormaliseerde) structuur maken waarin je jouw data kan opslaan. Dit kan bijvoorbeeld met phpMyAdmin, of HeidiSQL.

Jouw voorbeeld laat niks anders zien dan een simpel stukje HTML met wat opmaak en inhoud. Hiervan is niks geindexeerd omdat het gewoon 'hardcoded' is en geschreven staat in je layout. Als je deze opzet wilt vertalen naar een tabel, dan zit ik tot nu toe te denken aan één tabel omdat er één soort entiteit gebruikt wordt, en dat zijn de producten.
Het zal meer zo iets zijn:

index op Product:

4
1
3
2


Dus enkel de primary key in een andere volgorde. (Blauw staat alfabetisch boven aan en heeft id 4. Geel staat op de tweede plaats en heeft id 1 enz.)
De bestanden zelf zijn niet erg relevant, hier kun je van buitenaf toch niets mee. De indexes zelf zijn een btree voor zover ik weet bij MySQL, uiteraard afhankelijk van de gebruikte engine. InnoDB en MyISAM gebruiken btree.

Andere databases geven je keuzes tussen verschillende typen, afhankelijk van het type kolom dat je wilt indexeren. PostgreSQL geeft je bijvoorbeeld de optie om full text kolommen als zodanig te indexeren, dit is een index die gebaseerd is op de afstand tussen verschillende waarden. Hier is de layout sowieso al anders: ieder bestand is genaamd naar het OID van het betreffende object.
Dank voor de reactie's!
Ik zal mijn vraag anders stellen. Indexeren is dat het zelfde als op alfabetische volgorde zetten zoals in mijn html voorbeeld?
Zodat een engine de info sneller vind bij het opvragen
Niet helemaal, indexeren is het maken van een inhoudsopgave, vergelijkbaar met een legenda in een atlas.
Een index lijkt meer op een trefwoordenregister in een boek — niet voor niets vaak een index wordt genoemd. ;-)

Stel, je hebt drie soorten fruit:

- Aardbeien
- Appels
- Bananen

Op de eerste letter kun je die als volgt groeperen:


          +-----------+      +-----------+
          |     A     |      |     B     |
          +-----------+      +-----------+
          | Aardbeien |      | Bananen   |
          | Appels    |      +-----------+
          +-----------+


Zoek je de Bananen, dan heb je die in één stap gevonden, want onder de B in de index staan alleen Bananen.

Voor het andere fruit moeten we nog een niveau aan de index toevoegen:


          +-----------+      +-----------+
          |     A     |      |     B     |
          +-----------+      +-----------+
          | Aardbeien |      | Bananen   |
          | Appels    |      +-----------+
          +-----------+

+-----------+      +-----------+
|    AA     |      |    AP     |
+-----------+      +-----------+
| Aardbeien |      | Appels    |
+-----------+      +-----------+


Thanks voor de heldere uitleg :) het begint me langzaam duidelijk te worden :)
Nog een laatste vraagje hierover: Waaruit bepaal je hoeveel levels je index word, en word voor alle kolommen een index gemaakt ?
Nee, je gebruikt niet voor alle kolommen een index. Ze hebben alleen nut in grote tabellen op de kolommen waarop je juist zoekt. Denk aan bijvoorbeeld een naam.

Zie ook: http://www.phptuts.nl/view/32/
In je voorbeeld staat een kolom die maar twee mogelijke waarden heeft (voorraad: ja/nee). Bij slechts twee toestanden — en daarmee onder andere bij booleaanse waarden — heeft een index ook geen zin.

Als de volledige tekst van een boek in slechts twee woorden is geschreven, heb je een index nodig die even groot is als het boek zelf om in kaart te brengen waar die woorden in het boek voorkomen.

Reageren