我有各種辦公室和一箇中央總部。每個辦公室都有自己的SQL Server 2008實例,因此每個辦公室都有自己的數據集和自己的一組ID。TSQL - 從不同來源彙總數據...重構PK和FK
每個辦公室已經將數據導入總部,並將數據存儲在一組看起來像這樣的STAGING_Tables
中。
DECLARE @STAGING_COUNTRY TABLE
(
Original_CountryID INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
Data VARCHAR(200) NOT NULL
);
DECLARE @STAGING_CITY TABLE
(
Original_CityID INT NOT NULL,
Original_CountryID_FK INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
OtherData VARCHAR(100) NOT NULL
);
STAGING_COUNTRY
有每一行(其關閉過程將被複制,因爲每個辦公室都會有ID=1
的第一行上的Country
表),還具有獨特的OfficeID
值與Original_CountryID
在一起的原始ID。 。具有獨特的價值。
STAGING_CITY
也有各行的原始ID
,獨特的OfficeID
值代表每個辦事處,在這種情況下,FK到CountryID
,(當然在這一點上,我們必須結合了Original_CountryID
..that參考可以識別辦公室ID
)。
讓我們增加一些虛擬行:
/* ADD DUMMY VALUES TO STAGING_COUNTRY */
INSERT INTO @STAGING_COUNTRY
(Original_CountryID, OfficeID, Data) VALUES (1, 'Office1', 'USA')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (2, 'Office1', 'Canada')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office1', 'Japan')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (1, 'Office2', 'USA')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (1, 'Office2', 'Italy')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office2', 'Canada')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office3', 'Canada')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (2, 'Office3', 'France')
INSERT INTO @STAGING_COUNTRY (Original_CountryID, OfficeID, Data)
VALUES (3, 'Office3', 'USA')
/* ADD DUMMY VALUES TO STAGING_CITY */
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK, OfficeID, OtherData) VALUES
(1, 1, 'Office1', 'New York')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (2, 1, 'Office1', 'Vancouver')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (3, 1, 'Office1', 'Tokia')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (1, 2, 'Office2', 'New York')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (2, 2, 'Office2', 'Rome')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (3, 2, 'Office2', 'Vancouver')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (1, 3, 'Office3', 'Vancouver')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (2, 3, 'Office3', 'Paris')
INSERT INTO @STAGING_CITY (Original_CityID, Original_CountryID_FK,
OfficeID, OtherData) VALUES (3, 3, 'Office3', 'New York')
中央總部要運行從幾乎包含了複製的所有辦事處,但爲了使該報告的數據庫優化了所有的數據中心dtabase報告,我們需要重新洗牌了一下STAGING_Tables
...和重組在FINAL_Tables
看起來像這樣的數據:
DECLARE @FINAL_COUNTRY TABLE
(
CountryID INT IDENTITY PRIMARY KEY,
Original_CountryID INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
Data VARCHAR(200) NOT NULL
);
DECLARE @FINAL_CITY TABLE
(
CityID INT IDENTITY PRIMARY KEY,
Original_CityID INT NOT NULL,
CountryID_FK INT NOT NULL,
OfficeID VARCHAR(10) NOT NULL,
OtherData VARCHAR(100) NOT NULL
);
問題:
爲了報告目的,FINAL_COUNTRY
和FINAL_CITY
表應儘可能優化。這些報告將用T-SQL存儲過程編寫。
問題:
什麼是重組FINAL_Tables
,使每個記錄有一個真正的PK標識符(如在原Office_Tables
)的最佳方式和每個FK更新爲指向正確的新創建的PK ..在服務器級別?
注:
請注意,這兩種分期&決賽桌是相同的數據庫裏面,在服務器上。 另外我們仍然需要保留OriginalID
s在FINAL_Tables
用於其他目的。
目標:
這裏的主要目標是重組爲一組表可以很容易地編入索引的性能的目的。
如果需要,請詢問更多信息。
很多很多先進的感謝...
如果你還沒有,在讀了[**索引視圖**](http://msdn.microsoft.com/en- us/library/dd171921%28v = sql.100%29.aspx),在某些情況下,它們可以大大提升性能。 – 2012-02-03 21:56:13