Skip to content
New this month 24 fresh C++, C#, F#, JavaScript, TypeScript and Lua courses just landed. Browse new releases Use code WELCOME10 for 10% off your first order · 14-day refund

Read the Query Plan: Practical Database Performance

Turn EXPLAIN output into a fix list, and make slow endpoints fast without guesswork.

Rated 5.0 out of 5 from 1 review 14 students

SN Created by Sofia Navarro

  • Last updated August 2026
  • English
  • 8h 30m of material
  • 64 lessons

What you will learn

8 concrete outcomes

Every bullet below is something you will have built, shipped or be able to explain by the time you finish the last lesson.

  • Read EXPLAIN ANALYZE output as a tree with real costs and real timings
  • Compare estimated and actual rows to find where the planner was misled
  • Diagnose why an index was ignored, including implicit casts
  • Fix pagination that gets slower the deeper a user goes
  • Replace correlated subqueries running thousands of times
  • Find your slowest queries with the statistics extension
  • Detect plan regressions after a deploy rather than after a complaint
  • Judge when the schema, not the query, is the real problem

Course curriculum

7 modules · 64 lessons · 8h 30m of material

9 lessons running 1h 8m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

9 lessons running 1h 14m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

10 lessons running 1h 20m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

9 lessons running 1h 16m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

9 lessons running 1h 12m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

9 lessons running 1h 10m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

9 lessons running 1h 10m in total. Each lesson ships with the finished source files and a short written recap, so you can follow along in your own editor and skim the module again later.

Lesson-by-lesson titles, code downloads and exercises live inside the course library you get access to straight after checkout.

7 modules · 64 lessons

8h 30m total length

Requirements

Short list, and deliberately so. If you meet these you can start today.

  • Strong SQL including joins, aggregation and subqueries
  • Experience operating an application backed by a real database
  • Docker for the local environment and generated datasets

About this course

Database performance work is usually done by superstition. This course replaces that with a method: read the plan, find the expensive node, understand why the planner chose it, change one thing, measure again.

You learn to read EXPLAIN ANALYZE output properly, which means understanding the tree structure, the difference between estimated and actual rows, what loops multiplies, where buffer statistics reveal the real cost, and why the first number in a plan node is almost never the one that matters. Then you go node by node through the operators you will actually meet: sequential and index scans, bitmap heap scans, nested loop, hash and merge joins, sorts that spill to disk, hash aggregates, and common table expressions and their materialisation behaviour.

The heart of the course is a catalogue of real problems, each reproduced on a database you generate locally. A statistics estimate that is wrong by three orders of magnitude. A function on an indexed column defeating the index. An implicit cast doing the same thing invisibly. A join order the planner got backwards. Pagination that degrades linearly with offset. A correlated subquery running ten thousand times.

The final modules make it sustainable: finding slow queries in production, catching plan regressions after a deploy, and knowing when the honest answer is to change the schema rather than the query.

Frequently asked questions

Still unsure about something? Write to misteryjj100@gmail.com and a human answers, usually the same working day.

The plan reading is PostgreSQL-specific, since output formats differ. The diagnostic method and roughly seventy percent of the problems transfer directly to MySQL.

A generator script builds datasets from ten thousand to fifty million rows, so every problem in the catalogue reproduces on your own machine.

Yes. A module covers capturing the SQL an ORM emits, including the N plus one pattern, and fixing it without abandoning the ORM.

Checkout is handled on our provider's secure payment page. The moment your payment clears we email your personal access link and access code to the address you used at checkout, and the same link appears in your account library. There is nothing to install and nothing to wait for.

Email misteryjj100@gmail.com within 14 days of your purchase, quote your order number, and we refund the full amount to your original payment method. No form to fill in and no questions about how much of the course you watched.

What students say

Reviews are written by people who bought this course. We publish the critical ones too.

5.0

Rated 5.0 out of 5

Course rating · 1 review

Rating distribution

  • 5 stars 100%
  • 4 stars 0%
  • 3 stars 0%
  • 2 stars 0%
  • 1 star 0%
  • KM

    Kofi Mensah

    Data engineer

    Mar 2026
    Rated 5.0 out of 5

    Estimates against actuals is where the bugs live

    Being taught to check the ratio between estimated and actual rows before looking at anything else turned EXPLAIN output from a wall of text into a checklist I can work through. I found stale statistics behind a slow reporting query within a day of finishing.

Your instructor

SN

Sofia Navarro

Python and data engineer

  • 231 students taught
  • 11 courses published
  • 4.5 instructor rating
  • Python
  • SQL
  • PostgreSQL
  • Data engineering

Sofia builds the pipelines that keep analytics teams honest, mostly Python on top of PostgreSQL under uncomfortable load. She teaches schema design, indexing and query planning against anonymised production datasets rather than toy tables, then wires the same data into pandas so the SQL and the Python halves stop being separate skills. Expect to spend real time reading execution plans and rather less time reading slides. She consults on migrations for teams that cannot afford downtime.

$64 USD

One-time payment · lifetime access

The WisdomCharms dispatch

One useful email a week. No fluff, no spam.

New course releases, discount codes before anyone else, and a short, practical breakdown of one technique — a prompt pattern, a C++ idiom, a TypeScript trick — that you can use the same day.

  • Subscriber-only launch pricing
  • Unsubscribe in one click
  • We never sell your address

By subscribing you agree to our Privacy Policy. Questions? Write to misteryjj100@gmail.com.