USE [master] GO IF EXISTS (SELECT [database_id] FROM sys.databases WHERE [name] = 'WideWorldImportersDW') ALTER DATABASE [WideWorldImportersDW] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO DECLARE @datafilepath VARCHAR(8000) = CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS VARCHAR(4000)) + 'WideWorldImportersDW.mdf' DECLARE @logfilepath VARCHAR(8000) = CAST(SERVERPROPERTY('InstanceDefaultLogPath') AS VARCHAR(4000)) + 'WideWorldImportersDW.ldf' DECLARE @inmemfilepath VARCHAR(8000) = CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS VARCHAR(4000)) + 'WideWorldImportersDW_InMemory_Data_1' DECLARE @secondaryfilepath VARCHAR(8000) = CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS VARCHAR(4000))+ 'WideWorldImportersDW_2.ndf' -- Change @backupfile file path as needed DECLARE @backupfile VARCHAR(8000) = 'E:\SampleDBs\WideWorldImportersDW-Full.bak' RESTORE DATABASE WideWorldImportersDW FROM DISK = @backupfile WITH MOVE 'WWI_Primary' TO @datafilepath, MOVE 'WWI_UserData' TO @secondaryfilepath, MOVE 'WWIDW_InMemory_Data_1' TO @inmemfilepath, MOVE 'WWI_Log' TO @logfilepath, NOUNLOAD, REPLACE, STATS = 10 GO USE [master] GO ALTER DATABASE [WideWorldImportersDW] MODIFY FILE ( NAME = N'WWI_Log', SIZE = 4GB ) GO USE WideWorldImportersDW; GO /* Assumes a fresh restore of WideWorldImportersDW */ IF OBJECT_ID('Fact.OrderHistory') IS NULL BEGIN SELECT [Order Key], [City Key], [Customer Key], [Stock Item Key], [Order Date Key], [Picked Date Key], [Salesperson Key], [Picker Key], [WWI Order ID], [WWI Backorder ID], Description, Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Total Including Tax], [Lineage Key] INTO Fact.OrderHistory FROM Fact.[Order]; END; ALTER TABLE Fact.OrderHistory ADD CONSTRAINT PK_Fact_OrderHistory PRIMARY KEY NONCLUSTERED ([Order Key] ASC, [Order Date Key] ASC) WITH (DATA_COMPRESSION = PAGE); GO CREATE INDEX IX_Stock_Item_Key ON Fact.OrderHistory ([Stock Item Key]) INCLUDE(Quantity) WITH (DATA_COMPRESSION = PAGE); GO CREATE INDEX IX_OrderHistory_Quantity ON Fact.OrderHistory ([Quantity]) INCLUDE([Order Key]) WITH (DATA_COMPRESSION = PAGE); GO CREATE INDEX IX_OrderHistory_CustomerKey ON Fact.OrderHistory([Customer Key]) INCLUDE ([Total Including Tax]) WITH (DATA_COMPRESSION = PAGE); GO IF (SELECT COUNT(*) FROM [Fact].[OrderHistory]) < 3702592 BEGIN DECLARE @i smallint SET @i = 0 WHILE @i < 4 BEGIN INSERT INTO [Fact].[OrderHistory] ([City Key], [Customer Key], [Stock Item Key], [Order Date Key], [Picked Date Key], [Salesperson Key], [Picker Key], [WWI Order ID], [WWI Backorder ID], Description, Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Total Including Tax], [Lineage Key]) SELECT [City Key], [Customer Key], [Stock Item Key], [Order Date Key], [Picked Date Key], [Salesperson Key], [Picker Key], [WWI Order ID], [WWI Backorder ID], Description, Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Total Including Tax], [Lineage Key] FROM [Fact].[OrderHistory]; SET @i = @i +1 END; END GO IF OBJECT_ID('Fact.OrderHistoryExtended') IS NULL BEGIN SELECT [Order Key], [City Key], [Customer Key], [Stock Item Key], [Order Date Key], [Picked Date Key], [Salesperson Key], [Picker Key], [WWI Order ID], [WWI Backorder ID], Description, Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Total Including Tax], [Lineage Key] INTO Fact.OrderHistoryExtended FROM Fact.[OrderHistory]; END; ALTER TABLE Fact.OrderHistoryExtended ADD CONSTRAINT PK_Fact_OrderHistoryExtended PRIMARY KEY NONCLUSTERED ([Order Key] ASC, [Order Date Key] ASC) WITH (DATA_COMPRESSION = PAGE); GO CREATE INDEX IX_Stock_Item_Key ON Fact.OrderHistoryExtended ([Stock Item Key]) INCLUDE (Quantity); GO IF (SELECT COUNT(*) FROM [Fact].[OrderHistory]) < 29620736 BEGIN DECLARE @i smallint SET @i = 0 WHILE @i < 3 BEGIN INSERT Fact.OrderHistoryExtended([City Key], [Customer Key], [Stock Item Key], [Order Date Key], [Picked Date Key], [Salesperson Key], [Picker Key], [WWI Order ID], [WWI Backorder ID], Description, Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Total Including Tax], [Lineage Key]) SELECT [City Key], [Customer Key], [Stock Item Key], [Order Date Key], [Picked Date Key], [Salesperson Key], [Picker Key], [WWI Order ID], [WWI Backorder ID], Description, Package, Quantity, [Unit Price], [Tax Rate], [Total Excluding Tax], [Tax Amount], [Total Including Tax], [Lineage Key] FROM Fact.OrderHistoryExtended; SET @i = @i +1 END; END GO UPDATE Fact.OrderHistoryExtended SET [WWI Order ID] = [Order Key]; GO -- Repeat the following until log shrinks. These demos don't require much log space. CHECKPOINT GO DBCC SHRINKFILE (N'WWI_Log' , 0, TRUNCATEONLY) GO SELECT * FROM sys.dm_db_log_space_usage GO USE [WideWorldImportersDW]; GO ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; GO SELECT COUNT(DISTINCT [WWI Order ID]) FROM [Fact].[OrderHistoryExtended] OPTION (USE HINT('DISALLOW_BATCH_MODE'), RECOMPILE); GO USE [WideWorldImportersDW]; GO ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; GO SELECT APPROX_COUNT_DISTINCT([WWI Order ID]) FROM [Fact].[OrderHistoryExtended] OPTION (USE HINT('DISALLOW_BATCH_MODE'), RECOMPILE); GO