Database indexering

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bryan De Baar

Bryan De Baar

24/02/2017 00:44:40
Quote Anchor link
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
 
PHP hulp

PHP hulp

20/10/2020 00:40:05
 
- Ariën -
Beheerder

- Ariën -

24/02/2017 01:01:52
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/02/2017 01:37:44
Quote Anchor link
Het zal meer zo iets zijn:

index op Product:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
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.)
Gewijzigd op 24/02/2017 01:42:22 door Frank Nietbelangrijk
 
Ben van Velzen

Ben van Velzen

24/02/2017 02:11:27
Quote Anchor link
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.
 
Bryan De Baar

Bryan De Baar

24/02/2017 18:13:59
Quote Anchor link
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
 
Ben van Velzen

Ben van Velzen

24/02/2017 22:19:43
Quote Anchor link
Niet helemaal, indexeren is het maken van een inhoudsopgave, vergelijkbaar met een legenda in een atlas.
 
Ward van der Put
Moderator

Ward van der Put

25/02/2017 11:58:15
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
          +-----------+      +-----------+
          |     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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
          +-----------+      +-----------+
          |     A     |      |     B     |
          +-----------+      +-----------+
          | Aardbeien |      | Bananen   |
          | Appels    |      +-----------+
          +-----------+

+-----------+      +-----------+
|    AA     |      |    AP     |
+-----------+      +-----------+
| Aardbeien |      | Appels    |
+-----------+      +-----------+
 
Bryan De Baar

Bryan De Baar

26/02/2017 22:36:01
Quote Anchor link
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 ?
 
- Ariën -
Beheerder

- Ariën -

26/02/2017 23:13:56
Quote Anchor link
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/
 
Ward van der Put
Moderator

Ward van der Put

27/02/2017 07:44:02
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.