小编use*_*849的帖子

如何在 100 GB 表上创建聚集索引

我有一个堆表,它占用大约 104 GB 的磁盘空间,几乎有 30 亿行。我正在尝试在 [ WeekEndingDate] 列上的该表上创建聚集索引。我在数据文件中有大约 200 gb 的空闲空间,在 tempdb 中有大约 280 gb 的空闲空间。

我尝试了两种不同的方法。首先是使用以下命令直接在表上创建索引:

CREATE CLUSTERED INDEX CX_WT_FOLD_HISTORY
ON WT_FOLD_HISTORY (WeekEndingDate ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON, 
IGNORE_DUP_KEY = OFF
, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, 
DATA_COMPRESSION = PAGE)
Run Code Online (Sandbox Code Playgroud)

我用SORT_IN_TEMPDB = ON和都试过了OFF。使用时ON它填满了 tempdb 并用OFF它填满了数据驱动器。

另一种方法是创建一个具有所需索引的新空白表,然后将堆中的记录插入到新表中。这在填充数据驱动器后也失败了。

关于做什么的任何其他建议。我读过的大多数内容都表明,在创建索引时,我需要大约 1.2 倍的表大小才能用作工作区。我有更多的方法,但它仍然失败。任何建议,将不胜感激。

这是我原来的堆表结构:

CREATE TABLE [dbo].[WT_FOLD_HISTORY](
[WeekEndingDate] [varchar](50) NULL,
[Division] [varchar](50) NULL, …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2008 sql-server clustered-index

8
推荐指数
1
解决办法
1502
查看次数