我有一個表(2萬行)中的Informix V11.10,複製(50+節點)環境SQL遷移到垂直記錄
基本佈局就像這樣:
ID(PK)(INT)
除法(INT)
公司(INT)
特徵1炭(20)
特徵2 INT
...
特徵200字符(2)
有一個關於當前佈局有幾個問題: 有200個與此記錄相關的「特徵」,但是在任何給定時間可能有5-10個特徵不是默認值/空值(對於每個記錄不同)。
到一家公司的所有記錄的更新有時就意味着更新100K行這扼流圈複製,不容易管理。
所以我做了更改,像這樣的表:
ID(INT)
ID_TYPE(ID,部門或公司)
FEATURE_NAME
FEATURE_VALUE
而且還有另外一個表只:
ID(INT)
師(INT)
公司(INT)
所以對於發言權ID#1竟被存在d表中有10行,相關部門可能有幾條記錄,公司可能有幾條記錄。 ID記錄將「覆蓋」具有與分部相匹配的相同feature_name的任何記錄,並且分部將覆蓋任何公司。
我創建了一個函數,當你在ID傳遞和FEATURE_NAME它查詢根據公司,然後查詢上分裂,然後根據ID,並返回基於上述取代邏輯的特徵值。 (基本上有序foreach循環)
然後創建看起來像的視圖:
選擇
my_func,並將(特徵1,ID)作爲特徵1
my_func,並將(特徵2,ID)作爲特徵2
...
my_func,並將(feature200,ID)as feature200
from
現在的問題是,我打到表200 * 3(對於ID,公司,部門)時間爲每個功能,只是不工作,它的問題釘住CPU。新的記錄數量約爲2000萬,佔用的空間少得多。
有什麼想法?我覺得我錯過了在某個地方使用臨時表的情況,這使得它不需要在2000萬行的表上打600次。
是的不幸的是,由於許多傳統程序擊中此表,我將始終需要這200個可見的功能。 – user490231 2010-10-28 16:20:51
因此,請嘗試重寫視圖以直接訪問特徵表(如上所述),並比較結果的性能。 – 2010-10-28 16:22:55