The database was quiet until the new column arrived. Schema migrations had been planned for weeks, but the moment the ALTER TABLE statement hit production, everything changed. Queries that once ran in milliseconds now dragged. The monitoring graphs told the story: locks, waits, stale reads.
Adding a new column should be simple, but in production systems with high concurrency, nothing is simple. The type you choose dictates performance. A nullable TEXT field can bloat storage and slow scans. A JSONB payload offers flexibility but adds CPU overhead. Even an integer column can trigger table rewrites if not handled carefully.
The safest path starts before the migration. Check the table size in rows and total bytes. Determine if your database supports adding a column without a full table rewrite. PostgreSQL can add many new columns instantly if they have a NULL default, but a non-NULL default forces a table rewrite. MySQL behaves differently depending on the storage engine.