小编ani*_*ick的帖子

缩小非常大表上的数据类型

我有一个包含超过 1.5 亿条记录的表。目前的类型是:

id (Primary Key, Bigint)
idResult (Foreign key, Bigint null)
idItem (Foreign Key, Bigint null)
Number_1 (Bigint null)
Number_2 (Bigint null)
IsActive (Bigint null)
Run Code Online (Sandbox Code Playgroud)

Number_1 和 Number_2 永远不能大于 10。IsActive 显然是一个布尔值。并且这些列在代码库中的任何其他地方都不可以为空。我还想将外键字段更改为 int,但那又是另外一回事了。这张桌子是在我开始之前几年建造的,我们正在经历一些成长的痛苦。

我正在寻找转换这些列(以及其他表上的其他几个列,尽管这是主要的违规者)并回收该磁盘空间的最佳方法。我已经尝试了一个直接的Alter Table,但是,有点出乎意料,只是没有奏效。我不记得具体的错误,但我相信它与相关表格的大小有关。

现在我正在考虑手动删除并重新创建表,但我正在努力找出更好的方法来做到这一点,而不是使用 a Select TOP 10000 * FROM dbo.TABLENAME WHERE id > 0,并且简单地多次增加 where 子句。

我看过了Switch To,但这要求目标表的数据类型与源表匹配,这就是我要修复的问题!

有什么建议?我是不是看错了?

t-sql sql-server sql-server-2012

2
推荐指数
1
解决办法
2467
查看次数

标签 统计

sql-server ×1

sql-server-2012 ×1

t-sql ×1