可以說我有一堆產品。每個產品都有多個段落組成的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。
一般來說,對SQL來說假設的「哪個會更好」的問題是不可能回答的。變量太多,很多取決於使用情況。請問一個更具體的問題。我們需要知道什麼樣的查詢將運行,插入與選擇的頻率,索引結構,併發性等。 – JNK
性能在做什麼?只列出一切?更新產品說明?添加新的SKU? –
在搜索表格方面的表現。讓我們使用select/where color ='green'的例子。是否有一個具有5,000個長描述的表,其中1000個明顯減慢選擇查詢而不是加入兩個表(一個表只有1000個長描述)? – user1034772