2011-11-18 39 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非规范化表更好

表大多不长的查询变化和良好的