Tôi có một bảng heap chiếm khoảng 104 GB dung lượng đĩa với gần 3 tỷ hàng. Tôi đang cố gắng tạo một chỉ mục được nhóm trên bảng này trên WeekEndingDate
cột [ ]. Tôi có khoảng 200 gb miễn phí trong tệp dữ liệu và khoảng 280 gb miễn phí trong tempdb.
Tôi đã thử hai phương pháp khác nhau. Đầu tiên là tạo chỉ mục trực tiếp trên bảng bằng lệnh sau:
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)
Tôi đã thử cả với SORT_IN_TEMPDB = ON
và OFF
. Khi sử dụng, ON
nó chứa đầy tempdb và với OFF
nó chứa đầy ổ dữ liệu.
Phương pháp khác là tạo một bảng trống mới với chỉ mục cần thiết và sau đó chèn các bản ghi từ heap vào bảng mới. Điều này cũng thất bại sau khi lấp đầy ổ dữ liệu.
Bất kỳ đề nghị khác về những gì để làm. Hầu hết mọi thứ tôi đã đọc đều nói rằng tôi sẽ cần khoảng 1,2 lần kích thước của bảng để được sử dụng làm không gian làm việc trong khi tạo chỉ mục. Tôi có nhiều hơn thế và nó vẫn thất bại. Mọi lơi đê nghị đêu nên được đanh gia cao.
Đây là cấu trúc bảng heap ban đầu của tôi:
CREATE TABLE [dbo].[WT_FOLD_HISTORY](
[WeekEndingDate] [varchar](50) NULL,
[Division] [varchar](50) NULL,
[Store] [varchar](50) NULL,
[SKUNumber] [varchar](50) NULL,
[UPC] [varchar](50) NULL,
[SalesUnits] [varchar](50) NULL,
[SalesCost] [varchar](50) NULL,
[SalesRetail] [varchar](50) NULL,
[InventoryUnits] [varchar](50) NULL,
[InventoryCost] [varchar](50) NULL,
[InventoryRetail] [varchar](50) NULL,
[OnOrderUnits] [varchar](50) NULL,
[OnOrderCost] [varchar](50) NULL,
[OnOrderRetail] [varchar](50) NULL,
[ReceiptUnits] [varchar](50) NULL,
[ReceiptCost] [varchar](50) NULL,
[ReceiptRetail] [varchar](50) NULL,
[PermanentMarkdowns] [varchar](50) NULL,
[ReturnsToVendor] [varchar](50) NULL,
[POSMarkdowns] [varchar](50) NULL,
[TimeFK] [smallint] NULL,
[LocationFK] [int] NULL,
[ItemFK] [int] NULL
) ON [AcademySports_DataFG1]
DATA_COMPRESSION=NONE
? Nếu nó hoạt động, bạn có thể nén sau đó.