2015-04-24 48 views
0

的我有一種具有簡單父子結構優化父/子結構在一個表中有很多數據

products: 
- id 
- product_id 
- time_created 
- ... a few other columns 

這是一個家長,如果PRODUCT_ID IS NULL的表。產品id在這裏表現得像parent_id。裏面的數據看起來像這樣:

id | product_id 
1  NULL 
2  1  
3  1   
4  NULL   
4  4   

此表每晚更新一個新版本添加。

每個用戶都在使用很多這些產品,但只有一個版本。如果爲product_id添加新行,將通知用戶。

他可以停止使用id:2並開始使用id:3。另一位用戶將繼續使用ID:2等。

產品表每晚更新一次,並且增長速度非常快。目前大約有50萬行,每晚增加大約20000行,每年可能有5-7000000次更改(新行)。

有沒有辦法來優化這個數據庫/表結構?我應該改變什麼嗎?在一張桌子上有這麼多的數據是不是一個問題?

+0

歡迎來到stackoverflow。爲什麼你需要優化這個? –

+0

如果您的模式定義良好,7x10^6行/年根本不是問題。不要問一張桌子試圖看到大圖 – jean

+0

@HaleemurAli我不知道我是否需要優化這個,但我想爲未來和更多數據做好準備。 – tempname

回答

1

你的問題不清楚。樣本數據表明,親子關係只有一個深度。如果是這樣,這不是一個特別難的問題。您可以創建一個查詢,以查找最新的產品ID爲每個產品 - 和我假定這是一個具有最大id

select id, product_id, 
     max(id) over (partition by coalsesce(product_id, id)) as biggest_id 
from table t; 

然後,這是一個查找表,以獲得最大的ID。這將產生:

id | product_id | biggest_id 
1  NULL   3 
2  1    3 
3  1    3 
4  NULL   4 
4  4    4 

如果你的表有更深的層次,你可以,或者當表被更新做計算解決使用遞歸CTE的問題。

+0

我的問題不是關於關係,而是關於問題:在「行數太多」(即> 10萬)之後,我應該在多個表中拆分數據嗎? – tempname

+0

@tempname。 。 。你的問題不清楚。在拆分表之前,您應該努力添加最佳索引和表分區。有時需要拆分表格。 1000萬不是那麼多排。 –