2011-02-22 35 views
0

好吧,我有一張擁有10年價值數據的表格,性能正在受到重創。我計劃將舊數據轉移到單獨的歷史數據表中。問題是我需要從第一個表中選擇,如果它在那裏,第二個表如果沒有。我不想做一個連接,因爲那樣它總是會在第二張桌子上查找。幫幫我?數據倉庫的變化很小

+0

您不能根據標識字段進行遷移或創建日期嗎? – Oded 2011-02-22 21:54:27

+0

10年的數據:有多少行,這些索引表現如何?統計更新? – 2011-02-22 21:57:48

+0

@Oded - 請詳細說明,我計劃每週執行一次流程,並將符合特定條件的行移至歷史記錄表。我希望的是說:「SELECT * from currentdata,如果0 rows select * from olderdata」 – 2011-02-22 21:58:38

回答

1

如果您仍然需要查詢數據,我決不會將它移動到另一個表中。現在桌子有多大?什麼是索引?你有沒有考慮過分配桌子?

如果您必須移動到另一個表,您可以使用if語句在存儲的特效庫中查詢。首先查詢主表,然後如果rowcount = 0查詢另一個表。對於不在主表中的記錄來說速度會更慢,但如果它們在那裏的話應該保持快速。但是,它不知道你什麼時候需要記錄。

的代碼示例來做到這一點:

CREATE PROC myproc (@test INT) 
AS 
SELECT field1, field2 from table1field1, field2 from table1 
IF @@rowcount = 0 
BEGIN 
SELECT field1, field2 FROM table2 field1, field2 from table1 
END 

但真正的partioning和索引正確是probaly您的最佳選擇。還優化現有的查詢。如果您正在使用已知性能較差的技術,例如遊標,相關子查詢,調用視圖的視圖,標量函數,不可調整的where子句等,只修復查詢可能意味着您不必進行歸檔。

有時候,購買更好的服務器也會有幫助。

+0

原諒我對這部分的無知,我已經使用存儲過程進行更新等,但從未從一個選擇。語法怎麼看? – 2011-02-22 22:05:28

1

而不是使用一個單獨的歷史表,您可能需要考慮通過日期的某個函數(年或許?)對錶進行分區以提高性能。