MySQL — Portfolio Projects
Project 1: Schema Design and Indexing for a Real Application
Level: Beginner-Intermediate | Time: 1-2 days
Design a normalized MySQL schema for a realistic small application (a simple e-commerce store, a booking system, or similar), then deliberately test and tune its indexing.
Steps
utf8mb4 charset, appropriate PRIMARY KEY/FOREIGN KEY/UNIQUE constraints
EXPLAIN on each before adding any indexes
EXPLAIN actually shows (not guesses), and re-run EXPLAIN to confirm each index is actually being used
WHERE YEAR(created_at) = 2024) and document the performance difference against the range-comparison equivalent
EXPLAIN output as evidence, not just the final schema
Skills Demonstrated
EXPLAIN), not guesswork
GitHub Repo Name
mysql-schema-indexing-project
---
Project 2: Set Up and Test Real MySQL Replication
Level: Intermediate | Time: 2-3 days
Stand up a primary/replica MySQL setup (Docker Compose is fine) and actually exercise it — configuration alone doesn't demonstrate understanding.
Steps
CHANGE REPLICATION SOURCE TO, START REPLICA, SHOW REPLICA STATUS) — not the removed MASTER/SLAVE terminology
Seconds_Behind_Source stays near zero
SHOW REPLICA STATUS's error fields
Skills Demonstrated
GitHub Repo Name
mysql-replication-lab
---
Project 3: Query Performance Investigation Under Realistic Load
Level: Advanced | Time: 3-4 days
Simulate a production-scale MySQL workload, find real performance problems, and fix them with evidence.
Steps
long_query_time, and identify which of your queries actually qualify as "slow" at this scale
EXPLAIN ANALYZE (or EXPLAIN FORMAT=JSON) to diagnose the root cause of each slow query — missing index, function-wrapped column, N+1 pattern, or something else
SHOW ENGINE INNODB STATUS reveals about it
Skills Demonstrated
EXPLAIN/slow query log, not guesswork
GitHub Repo Name
mysql-performance-investigation
---
Tips for Great MySQL Projects
Test at realistic scale, not toy data. A schema and set of indexes that look fine against a thousand rows can behave completely differently against millions — the strongest projects above all involve testing at a volume large enough to actually reveal performance problems.
Show the EXPLAIN output, not just the final indexes. "I added this index" is far less convincing than "here's the EXPLAIN output before, showing a full scan, and after, showing an index-only scan."
Use current syntax. If your replication project uses CHANGE MASTER TO or SHOW SLAVE STATUS, that's an immediate, visible signal to anyone reviewing it that the material wasn't verified against current MySQL versions — those commands no longer exist in MySQL 8.4+.
Portfolio Checklist
EXPLAIN evidence

