68得票1回答
我如何在MySQL中交换表格?

假设我有一个名为foo的表,其中包含一些定期计算的统计数据。其他查询频繁使用它。 这就是为什么我想在foo_new中计算更近期的统计数据,并在计算完成后进行交换的原因。 我可以这样做: ALTER TABLE foo RENAME foo_tmp; ALTER TABLE foo_new...

60得票5回答
为什么将列更改为NOT NULL会导致日志文件大量增长?

我有一张表格,其中有64百万行数据,占用硬盘空间4.3 GB。 每一行大约有30个字节的整数列,加上一个变长字符列NVARCHAR(255)用于文本。 我添加了一个可为空的列,数据类型为Datetimeoffset(0)。 然后,我为每一行更新了这个列,并确保所有新插入的行都在这个列中放...

46得票6回答
我需要运行VACUUM FULL,但磁盘空间不足。

我有一张表占用了服务器硬盘空间的近90%。我决定删除一些列来释放空间。但是我需要将空间返回给操作系统。问题是,如果我运行VACUUM FULL并且没有足够的空闲空间来复制表,我不确定会发生什么。 我知道不应该使用VACUUM FULL,但在这种情况下我认为这是最好的选择。 如果有任何想法,...

32得票4回答
如何在已存在的表中添加一个带有外键约束的列?

我有以下的表格, CREATE TABLE users (id int PRIMARY KEY); -- already exists with data CREATE TABLE message (); 如何修改messages表,使其满足以下要求: 添加一个名为sender的新...

32得票2回答
数据库在ALTER TABLE操作时“冻结”。

我们的生产环境今天早上在修改表格时出现了一段时间的冻结。具体来说,是在添加一个列的时候发生的。 有问题的SQL语句为:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; 登录到我们的系统需要从这个表中进行选择操作,...

31得票4回答
添加列到生产表

什么是在SQL Server 2008 R2上向大型生产表添加列的最佳方法?根据Microsoft的在线书籍: ALTER TABLE中指定的更改会立即实施。如果更改需要修改表中的行,则ALTER TABLE会更新行。 ALTER TABLE在表上获取模式修改锁,以确保在更改期间没有其他连接...

30得票6回答
在生产环境的数据库上修改表结构

大多数“流行的”(MySQL、Postgres等)数据库系统如何处理对生产数据库进行表格更改(例如添加、删除或更改列类型)? 我知道“正确的方法”是备份所有内容,安排停机时间,然后进行更改。 但是...是否有任何当前的数据库系统支持在不停止任何操作的情况下进行这些操作?(也许只是延迟引用正...

28得票3回答
为什么我会更喜欢ALGORITHM=COPY而不是ALGORITHM=INPLACE呢?

自从MySQL 5.6引入在线DDL以来,ALTER TABLE命令可以选择指定ALGORITHM=INPLACE或ALGORITHM=COPY。在线DDL概述中指出,默认情况下,尽可能使用INPLACE,并且(虽然没有明确说明)暗示INPLACE算法比COPY算法更便宜。 那么,在ALTE...

27得票4回答
如何在最小化停机时间的情况下向大型表中添加一列行版本标识(rowversion)?

使用 SQL Server 2008 及以后的版本,我想在一个大表中添加一个 rowversion 列,但是当我只是 ALTER TABLE [Tablename] ADD Rowversion [Rowversion] NOT NULL 然后表格在太长时间内无法进行更新。 我可以使用...

26得票2回答
将一个列从NOT NULL更改为NULL - 底层发生了什么?

我们的表中有23亿行数据。我们想把一个列从NOT NULL改为NULL。该列包含在一个索引中(不是聚集或主键索引)。数据类型不会改变(它是一个INT)。只是空值属性会发生变化。语句如下: Alter Table dbo.Workflow Alter Column LineId Int NUL...