我有以下场景:
一张巨大的桌子,也是目前系统中使用最多的桌子。我所说的巨大是指它的行数很大,实际磁盘大小也很大,因为它有 2 个字节的数组列,可以从我们的系统中保存文件。
问题是当我需要从中删除大量行时。首先,我只尝试了一个 delete within
语句,但是当我决定重新启动数据库时,它冻结了整个表(不使用系统)大约 45 分钟。
然后我尝试删除 10 个注册表的块,并尝试删除 8k+ 行。它真的很慢,从那个表中获取数据的地方也很慢,当它删除了大约 700 行时,我启动了另一个使用同一个表的进程,并出现了死锁。
我应该如何从该表中进行这些批量删除?我考虑将表分成 2 个,一个用于包含大部分表卷的 2 字节数组,另一个用于包含其余信息(这些简单的东西,如 varchars、整数、日期时间等)。在这些删除情况下,这样做对我有好处吗?或者行数仍然会导致表上的这些锁?
SQL 的版本是 Microsoft SQL Server Standard(64 位)12.0.5000.0。