Adding a new column is one of the most common changes in a database, but it can still cause outages, lock tables, and slow queries. Doing it right means understanding how your storage engine, queries, and application lifecycles interact.
A new column changes the shape of every row. In MySQL with InnoDB, adding a column can trigger a full table rebuild. In PostgreSQL, it’s usually fast if you add a nullable column without a default, but adding a column with a non-null default can rewrite all rows. On large tables, those rewrites are expensive.
The safest path is to add columns in stages. First, add the column as nullable with no default. Then backfill data in controlled batches. Finally, set defaults and constraints once the data is complete. This avoids locking and keeps replication lag low.
For high-traffic systems, schema changes live alongside deployments. The application must handle the presence or absence of the column during the rollout window. Feature flags and versioned migrations reduce risk.