2011-11-18 69 views
-3

可以說我有一堆產品。每個產品都有多個段落組成的ID,價格和長描述。每個產品還會有多個代表不同尺寸和顏色的SKU編號。性能:加入表格與冗餘數據的大表格

澄清:product_id 1有3個skus,product_id 2有5個skus。產品1中的所有產品都具有相同的價格和描述。產品2與產品1有不同的價格和描述。產品2的所有產品均分享產品2的價格和描述。

我可以爲每個sku有不同記錄的大表。記錄會有冗長的字段,如長描述和價格。

或者我可以有兩張桌子。一個名爲「products」的product_id,價格和描述。還有一個名爲「skus」的product_id,sku,顏色和大小。然後我會加入product_id列中的表格。

$query = "SELECT * FROM skus LEFT OUTER JOIN products ON skus.product_id=products.product_id WHERE color='green'"; 

$query = "SELECT * FROM master_table WHERE color='green'"; 

這是我設置的簡單化版本。最後會有更多的專欄和許多產品。哪種方法會有更好的表現?

所以要更具體一點:比方說,我想要在long_description列中搜索所有skus。我試圖比較一張擁有5000個long_description和5000個skus的表,而另外一個有兩個表,其中一個有1000個long_description記錄,另一個有5000個skus。

+1

一般來說,對SQL來說假設的「哪個會更好」的問題是不可能回答的。變量太多,很多取決於使用情況。請問一個更具體的問題。我們需要知道什麼樣的查詢將運行,插入與選擇的頻率,索引結構,併發性等。 – JNK

+0

性能在做什麼?只列出一切?更新產品說明?添加新的SKU? –

+0

在搜索表格方面的表現。讓我們使用select/where color ='green'的例子。是否有一個具有5,000個長描述的表,其中1000個明顯減慢選擇查詢而不是加入兩個表(一個表只有1000個長描述)? – user1034772

回答

2

這取決於這些表的用法 - 爲了得到明確的答案,您應該同時使用這兩個表並使用代表性數據集/系統使用情況進行比較。

正常的做法是僅對數據進行denormalised以對抗您遇到的特定性能問題,因此在這種情況下,我的建議是默認加入兩個表,並且只有在使用單個表性能問題,並發現反規範化修復它。

1

OLTP規範化表更好

在查詢加入他們的行列,更簡便的數據manupulation和短查詢反響不錯

OLAP非規範化表更好

表大多不長的查詢變化和良好的