Version notes appreciated
Clear notes on what changed in PostgreSQL 18, such as buffers in EXPLAIN ANALYZE and skip scan.
Browse
Find slow PostgreSQL queries, read EXPLAIN ANALYZE output, design the right indexes and rewrite queries for predictable performance
Created by Irina Sokolova
Most database performance problems come from a small number of queries. Finding them, understanding why they are slow and fixing them is a skill that pays off every week for anyone who builds or runs applications on a relational database. This course teaches that skill with PostgreSQL, using a realistic dataset large enough for performance to matter.
You will work with an orders database containing millions of rows, generated by a provided script so you can reproduce every example locally. All examples run on PostgreSQL 17 and 18; where behaviour differs between versions, the lesson says so.
This is an advanced course for backend developers, database engineers and SREs who already write SQL comfortably and understand basic indexing. If you have ever added an index that did not help, or watched a query go from milliseconds to seconds as a table grew, this course explains why and what to do about it.
Database engineer teaching PostgreSQL, data modelling and query performance
I work as a database engineer, mostly with PostgreSQL. My job covers schema design, migrations, indexing, query tuning, backups and helping application developers understand why their queries are slow.
I teach databases as a practical engineering skill. We model real domains, write SQL by hand, read EXPLAIN output together and break things on purpose so you can see how constraints and transactions protect your data. I explain the theory, such as normal forms and isolation levels, only as far as it changes what you do.
All examples run on a local PostgreSQL install or a Docker container, and every course includes the scripts so you can reproduce each step.
Clear notes on what changed in PostgreSQL 18, such as buffers in EXPLAIN ANALYZE and skip scan.
The loops and estimates explanations changed how I look at EXPLAIN output. Found a 40 times misestimate in our main query the same day.
Starting from total time instead of the slowest single query reshaped our tuning work. Huge win from fixing two frequent queries.
Covering and partial indexes explained with real plans. I would like even more on partitioning.
We identified a blocking migration pattern thanks to the locks and timeouts lesson.
Very valuable, but some lessons pack a lot in. I rewatched the join algorithms lesson twice.
Keyset pagination and N+1 lessons were directly applicable to our API. Dataset script was a nice touch.