Optimalisatie van SQL-query’s: lees uitvoeringsplannen en repareer langzame query’s, met timing

  1. Home
  2. Blog
  3. Databases en SQL

Databases en SQL

Optimalisatie van SQL-query’s: Lees uitvoeringsplannen en repareer langzame query’s, met timing

Stop met raden waarom een zoekopdracht traag is. Leer een uitvoeringsplan lezen en pas vervolgens de verbeteringen toe die er het meest toe doen, met voor-en-na-metingen uit een echte tabel van een miljoen rijen.

9 min leestijd
Optimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing

Belangrijkste punten

  • Begin met het uitvoeringsplan. Het vertelt u wat de database feitelijk doet.
  • Zoek naar volledige scans op grote tabellen en voeg vervolgens indexen toe die overeenkomen met uw filters en joins.
  • Vermijd het omsluiten van een geïndexeerde kolom in een functie, omdat dit het efficiënte indexgebruik kan tegenhouden.
  • Meet voor en na, omdat elke database en dataset zich anders gedraagt.

Een zoekopdracht die vorig jaar milliseconden duurde, kan vandaag minuten duren, simpelweg omdat de tabel groter werd. SQL-queryoptimalisatie gaat niet zozeer over slimme trucs, maar meer over een herhaalbaar proces: ontdek wat de database doet, verwijder het verspilde werk en controleer of het heeft geholpen.

We hebben elke onderstaande techniek getest op een miljoen gegenereerde rijen in SQLite 3.50. De timing is de beste van meerdere runs vanaf één laptop, waarbij gebruik wordt gemaakt van een database in het geheugen. Ze passen niet bij uw systeem en PostgreSQL, MySQL en SQL Server hebben elk hun eigen optimizers en planformaten. Concentreer u op de omvang van elke verbetering en op de principes erachter.

Resultaten in één oogopslag

Techniek Voor Na
Index op de filterkolom 73 ms 0,01 ms
Bereik in plaats van een functie op een kolom 96 ms 33 ms
Samengestelde index voor twee filters 19 ms 2,2 ms
Keyset in plaats van diepe OFFSET 8,1 ms 0,01 ms

De testopstelling

CREATE TABLE customers (
  id INTEGER PRIMARY KEY, name TEXT, city TEXT
);
CREATE TABLE orders (
  id INTEGER PRIMARY KEY, customer_id INT, status TEXT,
  created TEXT, total INT, note TEXT
);
-- 50,000 customers and 1,000,000 orders with random values

Een eenvoudig optimalisatieproces

  1. Vind de zoekopdrachten die er toe doen. Gebruik trage zoekopdrachtlogboeken of monitoring. Een zoekopdracht van 200 ms die duizend keer per minuut wordt uitgevoerd, kan er meer toe doen dan een maandelijks rapport van 10 seconden.
  2. Lees het plan. Kijk wat de database werkelijk doet.
  3. Verander één ding. Voeg een index toe of herschrijf een deel van de query.
  4. Meet opnieuw op basis van realistische gegevens. Een plan op 100 testrijen vertelt je heel weinig over een miljoen.
  5. Bekijk het in de loop van de tijd. Plannen kunnen veranderen naarmate de gegevens toenemen en de statistieken veranderen.

Lees een uitvoeringsplan

Een uitvoeringsplan is de stapsgewijze strategie van de database voor het uitvoeren van een query, inclusief welke indexen de database gebruikt en in welke volgorde de database aan tabellen wordt toegevoegd. Voeg een voorvoegsel aan een query toe om deze te zien:

Database Commando
SQLiet UITLEG QUERY PLAN SELECTEREN ...
PostgreSQL UITLEG ANALYSEREN SELECTEREN ...
MySQL EXPLAIN SELECT ..., of EXPLAIN ANALYZE
SQL-server Werkelijk uitvoeringsplan in SSMS

Merk op dat EXPLAIN ANALYZE in PostgreSQL de query daadwerkelijk uitvoert, dus wees voorzichtig als je deze gebruikt met UPDATE of DELETE. Hier is waar u eerst op moet letten:

Zie je Betekenis Meestal
Scannen of Seq-scannen Leest de hele tabel Een probleem op grote tafels
Zoeken of indexeren Springt naar overeenkomende rijen Goed
Dekkende index Alleen beantwoord vanuit de index Zeer goed
Temp B-boom of Sorteren Extra sorteerwerk De moeite waard om te controleren

Een volledige scan is niet automatisch slecht. Als een zoekopdracht het grootste deel van een kleine tabel nodig heeft, kan scannen de snelste keuze zijn. Vergelijk in PostgreSQL’s EXPLAIN ANALYZE ook geschatte rijen met werkelijke rijen. Een groot verschil betekent vaak dat tabelstatistieken verouderd zijn.

Voeg de juiste index toe

Met deze zoekopdracht worden de bestellingen van één klant gevonden:

SELECT id, total FROM orders WHERE customer_id = 123;

Voordat een index werd toegevoegd, was het plan een volledige scan:

SCAN orders
-- 20 rows in 73 ms

Vervolgens hebben we een index aan de filterkolom toegevoegd:

CREATE INDEX idx_orders_customer ON orders(customer_id);

SEARCH orders USING INDEX idx_orders_customer (customer_id=?)
-- 20 rows in 0.01 ms

Dezelfde twintig rijen kwamen duizenden keren sneller terug, omdat de database niet langer een miljoen rijen las om ze te vinden. Geen enkele andere techniek in dit artikel heeft ons een grotere overwinning opgeleverd. Goede eerste kandidaten zijn de kolommen die worden gebruikt in WHERE, JOIN en ORDER BY, vooral als ze de resultaten beperken tot een paar rijen. In onze gids voor SQL-indexen wordt uitgelegd hoe ze werken.

Plaats geïndexeerde kolommen niet in functies

Hier zijn twee manieren om bestellingen voor maart te vinden, met een index op created:

-- Function on the column
SELECT id FROM orders WHERE substr(created, 1, 7) = '2026-03';
-- SCAN orders USING COVERING INDEX idx_orders_created
-- 84,961 rows in 96 ms

-- Plain range
SELECT id FROM orders
WHERE created >= '2026-03-01' AND created < '2026-04-01';
-- SEARCH orders USING COVERING INDEX idx_orders_created (created>? AND created<?)
-- 84,961 rows in 33 ms

Beide retourneren identieke rijen, maar de eerste duurde ongeveer drie keer zo lang. Het plan laat zien waarom: met een functie op de kolom kan de database niet naar een positie in de gesorteerde index springen, dus moet hij door elke invoer heen SCAN. De range-versie kan SEARCH meteen op de juiste plaats terechtkomen. Een voorwaarde die op deze manier een index kan gebruiken, wordt sargable genoemd.

Hetzelfde probleem doet zich voor bij deze veelvoorkomende patronen:

Vermijd Liever
WAAR JAAR(aangemaakt) = 2026 WHERE aangemaakt >= '01-01-2026' AND aangemaakt < '01-01-2027'
WAAR prijs * 2 > 100 WAAR prijs > 50
WAAR LAGER(e-mail) = 'a@b.com' Een op functies gebaseerde index of een niet-hoofdlettergevoelige sortering
WHERE naam LIKE '%99' Zoeken op voorvoegsel of zoeken in volledige tekst

Dat laatste hebben we ook gecontroleerd. Er werd een leidende jokerteken geproduceerd SCAN customers, omdat een index gesorteerd vanaf de eerste letter niet kan helpen bij een match aan het eind.

Samengestelde indexen

Wanneer een query op twee kolommen filtert, doet een index met één kolom slechts een deel van de taak:

SELECT id FROM orders
WHERE status = 'paid'
  AND created >= '2026-03-01' AND created < '2026-03-08';

-- Using only the created index: 6,198 rows in 19 ms

CREATE INDEX idx_status_created ON orders(status, created);

-- SEARCH orders USING COVERING INDEX idx_status_created
--   (status=? AND created>? AND created<?)
-- 6,198 rows in 2.2 ms

De kolomvolgorde is van groot belang. Een index op (status, created) werkt als een telefoonboek, gesorteerd op achternaam en vervolgens op voornaam. U kunt alleen een achternaam opzoeken, maar niet alleen een voornaam. Alleen al onze zoekopdracht op status zou deze index kunnen gebruiken. Door alleen op created te filteren, kan er doorgaans niet efficiënt gebruik van worden gemaakt. Als vuistregel plaatst u de met gelijkheid geteste kolommen eerst en de bereikkolommen erna.

In dat plan staat ook dat de index wordt gedekt, wat betekent dat de index alles bevatte wat de zoekopdracht nodig had, zodat de tabel zelf niet hoefde te worden gelezen. Door alleen de kolommen te selecteren die je nodig hebt, wordt dit waarschijnlijker, wat nog een reden is om dit te vermijden SELECT *.

Snellere paginering

Het gebruik van OFFSET voor diepe pagina’s brengt verborgen kosten met zich mee, omdat de database nog steeds langs alle overgeslagen rijen moet lopen:

-- Page deep into the results
SELECT id FROM orders ORDER BY id LIMIT 20 OFFSET 500000;
-- 8.1 ms

-- Keyset pagination: continue from the last id seen
SELECT id FROM orders WHERE id > 500000 ORDER BY id LIMIT 20;
-- 0.01 ms

Keyset-paginering blijft snel, hoe diep u ook gaat. Het voorkomt ook dat rijen tussen pagina’s verschuiven wanneer nieuwe gegevens worden toegevoegd. Het nadeel is dat gebruikers niet meteen naar pagina 5.000 kunnen springen, wat zelden echt nodig is. Op tafels met brede rijen, of met meer rijen om over te slaan, kan het gat veel groter zijn dan in onze test.

Tip: Onze timings meten één zoekopdracht tegelijk op een inactieve machine. Onder echte belasting richt een inefficiënte query meer schade aan, omdat deze ook vergrendelingen vasthoudt en met al het andere concurreert om geheugen, schijf en CPU.

Schrijf slankere query’s

  • Selecteer alleen de kolommen die je nodig hebt. SELECT * verzendt meer gegevens en kan voorkomen dat een index de zoekopdracht beantwoordt.
  • Vroeg filteren. Gebruik WHERE om rijen te verwijderen vóór het groeperen, en HAVING alleen voor voorwaarden voor aggregaties. Zie SQL GROUP BY en HAVING.
  • Gebruik LIMIT als je maar een paar rijen nodig hebt.
  • Geef de voorkeur aan UNION ALL als u geen duplicaten wilt verwijderen. Onze test UNION versus UNION ALL laat zien wat dat bespaart.
  • Vermijd onnodige DISTINCT. Vaak wordt een join verborgen die duplicaten oplevert.
  • Gebruik EXISTS voor bestaanscontroles. Het kan stoppen bij de eerste overeenkomst, zoals uitgelegd in onze gids voor SQL-subquery’s.
  • Let op N+1 zoekopdrachten. Eén zoekopdracht per rij in een lus, meestal veroorzaakt door applicatiecode, is vaak het echte probleem. Eén enkele join- of batchquery kan honderden round trips vervangen.

Sluit zich aan

Indexeer de kolommen waaraan u deelneemt. We hebben een rapport over de totale uitgaven gemaakt voor klanten in één stad, en het plan was precies wat u ervan verwachtte:

SELECT c.name, SUM(o.total)
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE c.city = 'Goa'
GROUP BY c.id;

-- SCAN c
-- SEARCH o USING COVERING INDEX idx_cover (customer_id=?)
-- 9,900 rows in 34 ms

Het scant de klanten en gebruikt vervolgens een index om ieders bestellingen te vinden. Zonder index op orders.customer_id zou de database voor elke klant veel meer werk moeten verzetten. Een index op de externe sleutel is een van de meest voorkomende en waardevolle toevoegingen die u kunt doen. Zie SQL-joins uitgelegd om uw begrip van de basisprincipes op te frissen.

Wanneer indexen u kosten

Indexen zijn niet gratis, dus voeg er niet één toe voor elke kolom:

  • Langzamere schrijfbewerkingen. Bij elke invoeging, update en verwijdering moet ook elke index worden bijgewerkt.
  • Meer opslagruimte en geheugen. Indexen kunnen groot worden op grote tabellen.
  • Weinig voordeel bij niet-selectieve kolommen. Een index op een kolom waar of onwaar is mogelijk niet nuttig als de meeste rijen overeenkomen.
  • Redundantie. Een index op (a) is vaak niet nodig als je er al een hebt op (a, b).

Controleer regelmatig de gebruiksstatistieken en verwijder indexen die niets gebruikt. En houd de statistieken actueel met ANALYZE of het equivalent van uw database, omdat de optimalisatie ervan afhankelijk is om een ​​goed plan te kiezen. Soms is het langzame deel een twist in plaats van een vraag. Langdurige transacties die vergrendelingen bevatten, kunnen ervoor zorgen dat een snelle zoekopdracht traag lijkt.

Veel voorkomende fouten

  • Optimaliseren zonder te meten. Veel zelfverzekerde gissingen blijken verkeerd te zijn.
  • Testen met kleine gegevens. Plannen en timings veranderen dramatisch naarmate de tabellen groter worden.
  • Een tip voor een andere database vertrouwen. Advies voor de ene engine is mogelijk niet van toepassing op de andere.
  • Het blindelings toevoegen van indexen. Elke index vertraagt ​​het schrijven.
  • Het effect van de eerste run wordt genegeerd. Met caches wordt een tweede run sneller uitgevoerd, dus meerdere keren rennen.

Tot slot

De meeste langzame query’s hebben gewone oorzaken: een ontbrekende index, een functie in een kolom of er worden te veel gegevens opgehaald. Neem deze week uw langzaamste echte zoekopdracht, voer EXPLAIN uit en zoek naar een volledige scan op een grote tafel. Corrigeer één ding, meet opnieuw en houd aantekeningen bij van wat u hebt gewijzigd.

Veelgestelde vragen

Wat is SQL-queryoptimalisatie?

Het is het proces waarbij query’s minder tijd en minder middelen verbruiken, meestal door uitvoeringsplannen te onderzoeken, geschikte indexen toe te voegen en inefficiënte query’s te herschrijven.

Wat is een uitvoeringsplan?

Het is de door de database gekozen strategie voor het uitvoeren van een query, inclusief hoe tabellen worden gelezen, welke indexen worden gebruikt en in welke volgorde deze worden samengevoegd.

Hoe vind ik langzame zoekopdrachten?

Schakel het langzame querylogboek van uw database in of gebruik tools zoals pg_stat_statements in PostgreSQL. Concentreer u vervolgens op zoekopdrachten met de hoogste totale tijd.

Maakt het toevoegen van een index zoekopdrachten altijd sneller?

Nee. Het helpt bij selectief lezen, maar vertraagt ​​het schrijven en gebruikt opslagruimte. De optimalisatie kan dit ook negeren als de meeste rijen aan de voorwaarde voldoen.

Is SELECT * slecht voor de prestaties?

Het kan zijn. Het draagt ​​onnodige gegevens over en kan voorkomen dat een index de zoekopdracht beantwoordt. Het is meestal beter om alleen de kolommen op te sommen die u nodig heeft.

Blijf leren

Werk met Stack Quora

Hulp nodig met testen, WordPress of SEO?

We helpen teams betere software te leveren en hun sites te laten groeien. Vertel ons waar u mee bezig bent en wij stellen een duidelijke volgende stap voor.

Blijf lezen

Meer handleidingen over testen, AI en moderne ontwikkeling

Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.

Kunstmatige intelligentie

AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen

AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…

Lees artikel →
DevOps

Omgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan

Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…

Lees artikel →
Softwareontwikkeling

API-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten

API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…

Lees artikel →
Testautomatisering

Spotten in Python: unittest.mock, patch en de fouten die tests doen liegen

Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…

Lees artikel →
Softwaretesten

Codedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent

Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…

Lees artikel →
Databases & SQL

DELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken

DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…

Lees artikel →
Databases & SQL

SQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden

SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…

Lees artikel →
Softwareontwikkeling

TypeScript-interface versus type: echte verschillen, getest met de compiler

TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…

Lees artikel →
Softwareontwikkeling

Python *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden

Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…

Lees artikel →
Softwareontwikkeling

Python Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken

Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…

Lees artikel →
Kunstmatige intelligentie

Wat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren

Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…

Lees artikel →
DevOps

Monitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen

Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…

Lees artikel →
DevOps

Docker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier

Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…

Lees artikel →
Testautomatisering

TDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt

TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…

Lees artikel →
Softwaretesten

Gebruikersacceptatietesten (UAT): proces, checklist en echte voorbeelden

Gebruikersacceptatietesten uitgelegd: wie voert het uit, hoe het verschilt van QA, een proces in zeven stappen, een UAT-testcase-sjabloon, een check…

Lees artikel →
Databases & SQL

SQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen

SQL NULL-waarden uitgelegd met query's die we hebben uitgevoerd: logica met drie waarden, IS NULL, COALESCE, NULLIF, hoe aggregaten, joins en sorter…

Lees artikel →
Databases & SQL

SQL CASE WHEN-instructie: syntaxis, echte voorbeelden en veelvoorkomende fouten

SQL CASE WHEN uitgelegd met vragen die we hebben uitgevoerd: eenvoudige en doorzochte formulieren, volgorde van de voorwaarden, draaipunten met SUM,…

Lees artikel →
Softwareontwikkeling

Wat is JWT? JSON-webtokens uitgelegd met een werkend voorbeeld

Wat is JWT? JSON Web Tokens uitgelegd: de drie delen, een token gebouwd en waarmee is geknoeid in de code die we hebben uitgevoerd, JWT versus sessi…

Lees artikel →
Softwareontwikkeling

JavaScript-gebeurtenislus uitgelegd: call-stack, microtaken en timers met voorbeelden

De JavaScript-gebeurtenislus uitgelegd met code die we hebben uitgevoerd: call-stack, taak- en microtask-wachtrijen, waarom setTimeout 0 niet onmidd…

Lees artikel →
Softwareontwikkeling

Python-generatoren en opbrengst uitgelegd: bespaar geheugen met echte voorbeelden

Python-generatoren en opbrengst uitgelegd met code die we hebben uitgevoerd: hoe ze pauzeren en hervatten, gemeten geheugenbesparingen, pijplijnen, …

Lees artikel →
Kunstmatige intelligentie

Wat zijn inbeddingen? Vectoren en cosinusovereenkomst eenvoudig uitgelegd

Wat zijn insluitingen? Een gids in duidelijke taal over vectoren, cosinusovereenkomst en semantisch zoeken, met een klein voorbeeld dat we hebben ui…

Lees artikel →
DevOps

Implementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen

Blauw-groen versus kanarie-implementatie uitgelegd: hoe elk werkt, kosten, risico's en terugdraaien, stabiele gebruikersbucket die we hebben getest,…

Lees artikel →
Testautomatisering

Schilferige tests: wat de oorzaak ervan is en hoe u ze voorgoed kunt oplossen

Zwakke tests uitgelegd met demo's die we hebben uitgevoerd: de belangrijkste oorzaken, hoe je er een kunt bevestigen en diagnosticeren, goede oploss…

Lees artikel →
Softwaretesten

Belastingtesten versus stresstesten: verschillen, statistieken en k6-voorbeelden

Belastingtesten versus stresstesten uitgelegd: wat elk bewijst, piek- en soak-tests, de statistieken die er toe doen, waarom gemiddelden misleiden, …

Lees artikel →
Softwaretesten

Testcase versus testscenario: belangrijkste verschillen, voorbeelden en wanneer deze te gebruiken

Testcase versus testscenario uitgelegd: duidelijke definities, een tabel naast elkaar, één functie voor het opnieuw instellen van wachtwoorden, over…

Lees artikel →
Databases & SQL

Optimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing

Optimalisatie van SQL-query's getest op een miljoen rijen: lees uitvoeringsplannen, voeg de juiste indexen toe, repareer niet-sargeerbare filters, g…

Lees artikel →
Databases & SQL

SQL UNION versus UNION ALL: verschillen, voorbeelden en geteste prestaties

SQL UNION versus UNION ALL uitgelegd met de query's die we hebben uitgevoerd: duplicaten, de regels volgen beide, een echte databug, gemeten prestat…

Lees artikel →
Softwareontwikkeling

JavaScript Fetch API-tutorial: GET, POST, foutafhandeling en time-outs

Een JavaScript Fetch API-tutorial getest tegen een lokale server: GET en POST, waarom 404 niet gooit, een herbruikbare helper, queryreeksen, time-ou…

Lees artikel →
Softwareontwikkeling

Python-bestandsverwerking: lezen, schrijven, CSV, JSON en pathlib met voorbeelden

Het verwerken van Python-bestanden uitgelegd met code die we hebben uitgevoerd: open modi, met het lezen van grote bestanden, CSV, JSON, pathlib, bi…

Lees artikel →
Softwareontwikkeling

Python-klassen en -objecten: OOP-zelfstudie met echte voorbeelden

Python-klassen en -objecten uitgelegd met code die we hebben uitgevoerd: __init__, methoden, klasse versus instantie-attributen, overerving, eigensc…

Lees artikel →
Kunstmatige intelligentie

Wat is een groot taalmodel? Hoe LLM's werken, uitgelegd zonder de hype

Wat is een groot taalmodel? LLM's uitgelegd in duidelijke taal: tokens, inbedding, aandacht, training, temperatuur- en contextvensters, een kleine d…

Lees artikel →
DevOps

Linux-opdrachten voor beginners: de essentiële terminalgids met voorbeelden

Linux-opdrachten voor beginners, gegroepeerd op taak: navigatie, bestanden, logboeken bekijken, grep, pipelines, machtigingen, processen en archieve…

Lees artikel →
Testautomatisering

Selenium versus toneelschrijver: belangrijkste verschillen, code vergeleken en welke te kiezen

Selenium versus Playwright vergeleken: architectuur, wachten, browser- en taalondersteuning, debuggen, dezelfde test in beide tools, migratieadvies …

Lees artikel →
Softwaretesten

Equivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden

Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…

Lees artikel →
Softwaretesten

Ernst versus prioriteit bij het testen van software: verschillen, matrix en echte voorbeelden

Ernst versus prioriteit bij het testen van software uitgelegd: duidelijke definities, een vierwegmatrix met voorbeelden, niveauschalen, wie deze bep…

Lees artikel →
Databases & SQL

Tutorial voor SQL-subquery's: typen, gecorreleerde subquery's en BESTAAN met voorbeelden

Een SQL-subquery-tutorial met query's die we hebben uitgevoerd: scalaire, IN-, FROM- en SELECT-subquery's, gecorreleerde subquery's, EXISTS, de NOT …

Lees artikel →
Databases & SQL

SQL-transacties en ACID uitgelegd: COMMIT-, ROLLBACK- en isolatieniveaus

SQL-transacties en ACID uitgelegd met een bankoverschrijving die we hebben uitgevoerd: COMMIT, ROLLBACK, savepoints, locks, isolatieniveaus, dirty r…

Lees artikel →
Softwareontwikkeling

Git Commands Cheat Sheet: de commando's die je daadwerkelijk gebruikt, met voorbeelden

Een spiekbriefje voor Git-opdrachten, gegroepeerd op taak: setup, staging, branches, remotes, stash, geschiedenis en fouten ongedaan maken, met uitv…

Lees artikel →
Softwareontwikkeling

JavaScript-beloften uitgelegd: vervolgens catch, Promise.all en veelvoorkomende fouten

JavaScript-beloften uitgelegd met code die we hebben uitgevoerd: staten, dan en catch-ketens, foutafhandeling, Promise.all, allSettled, race en wat …

Lees artikel →
Softwareontwikkeling

Zelfstudie Python-woordenboek: methoden, voorbeelden en veelvoorkomende patronen

Een Python-woordenboektutorial met code die we hebben uitgevoerd: dictaten, sleutelmethoden, samenvoeg-, begrips-, tel- en groeperingspatronen en ve…

Lees artikel →
Kunstmatige intelligentie

Wat is RAG? Retrieval-Augmented Generation uitgelegd met een werkend voorbeeld

Wat is RAG? Retrieval-augmented generatie stap voor stap uitgelegd: indexeren, chunken, insluiten, ophalen, een klein werkend Python-voorbeeld, eval…

Lees artikel →
DevOps

Terraform-zelfstudie voor beginners: infrastructuur als code van het eerste bestand tot modules

Een Terraform-tutorial voor beginners: begin zonder cloudaccount, leer init, plan en pas toe, vervolgens variabelen, outputs, status, modules en een…

Lees artikel →
DevOps

Docker versus Kubernetes: belangrijkste verschillen, hoe ze samenwerken en welke u nodig heeft

Docker vs Kubernetes legde uit: wat elk doet, dezelfde app draait met beide, Docker Compose en Swarm vergeleken, de dockershim veranderen en hoe je …

Lees artikel →
Testautomatisering

Pytest-tutorial voor beginners: armaturen, parametriseren en echte voorbeelden

Een pytest-tutorial voor beginners met tests die we hebben uitgevoerd op pytest 9.2: beweringen, armaturen, parametrize, conftest, markers, tmp_path…

Lees artikel →
Softwaretesten

Levenscyclus van softwaretests (STLC): 6 fasen, in- en uitgangscriteria, voorbeeld

De levenscyclus van softwaretesten uitgelegd: zes STLC-fasen met in- en uitstapcriteria, deliverables, een voorbeeld van een uitgewerkte inlogfuncti…

Lees artikel →
Softwareontwikkeling

Git merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt

Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.

Lees artikel →
Softwareontwikkeling

Python list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt

Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.

Lees artikel →
Databases & SQL

SQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)

Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.

Lees artikel →