Adding a new column sounds simple. It is not. Done wrong, it blocks deploys, locks tables, and breaks production queries. Done right, it is fast, safe, and invisible to users. In high‑traffic systems, the method matters as much as the schema.
Start with the core question: is the new column nullable, does it have a default value, and will it be read immediately after release? For large datasets, setting a default with ALTER TABLE ... ADD COLUMN ... DEFAULT ... can trigger a table rewrite—seconds if you are lucky, hours if you are not. Avoid this by first adding the column as nullable, backfilling in batches, then applying the default and NOT NULL constraints in later migrations.
When adding a new column to MySQL or PostgreSQL, check for lock‑level implications. On PostgreSQL 11+, adding a column with a constant default is metadata‑only, but constraints still require a full scan. In MySQL, default values are cheap, but index creation on a newly added column requires care to avoid blocking writes.