Basis van databases
Voor de tabel Lid met 1 miljoen rijen wordt overwogen op elk van de kolommen LidNr (allemaal verschillend), Prefectuur (47 waarden) en Geslacht (2 waarden, ruwweg half om half) een B+-boomindex aan te maken. Op welke kolom is een index waarschijnlijk het minst effectief bij een zoekopdracht waarin in de WHERE-clausule een waarde voor één kolom wordt opgegeven?
- APrefectuur
- BGeslacht
- CLidNr
Antwoord en toelichting tonen
Antwoord: B. Geslacht
Een index is effectief als de rijen die aan de voorwaarde voldoen worden beperkt tot een klein deel van het geheel. Elk LidNr is verschillend, dus slechts één rij voldoet en de index leidt er rechtstreeks naartoe. Prefectuur heeft 47 waarden, dus als de leden gelijkmatig verdeeld zijn, beperkt één waarde de zoekopdracht tot ongeveer 1 miljoen ÷ 47 ≈ 21.000 rijen (ongeveer 2% van het totaal). Geslacht heeft twee waarden die ruwweg half om half verdeeld zijn, dus elk van beide waarden levert ongeveer 500.000 rijen op (ongeveer 50%). Zoveel rijen een voor een via een index ophalen is vaak trager dan een full table scan die de tabel van begin tot eind leest, dus de optimizer van het DBMS kan een uitvoeringsplan kiezen dat de index niet gebruikt. Zo geldt: hoe meer verschillende waarden een kolom heeft en hoe sterker een voorwaarde erop de rijen beperkt (hoe selectiever ze is), hoe effectiever een index op die kolom is.