Eu tenho uma tabela contendo mais de 50 milhões de linhas.
Quando adiciono uma coluna:
ALTER TABLE my_table ADD my_column NUMBER;
É muito rápido.
Logo após adicionar a coluna, eu a solto.
ALTER TABLE my_table DROP COLUMN my_column;
Demora 3 minutos!
Por que adicionar uma coluna é tão rápido, ao removê-la sem preenchê-la é lento?
Quando você adiciona uma coluna que permite valor nulo e não fornece um valor padrão, o banco de dados não precisa fazer nada nos próprios dados da tabela. As linhas permanecem inalteradas, apenas os metadados da tabela são alterados.
(Isso se deve ao formato de linha no disco usado. Colunas nulas no final de uma linha não são armazenadas nas partes da linha, em geral/em circunstâncias normais/para tipos de dados comuns.)
Por outro lado, quando você descarta fisicamente uma coluna (em vez de ocultar/definir como não utilizada), todas as linhas precisam ser pelo menos inspecionadas para verificar se algum dado precisa ser removido. Portanto, o melhor custo teórico é uma varredura completa da tabela. (Acredito que também haja algum bloqueio de tabela envolvido.) Na pior das hipóteses, todas as linhas devem ser reescritas. Isso pode ser muito caro.