【发布时间】:2012-01-01 08:43:33
【问题描述】:
假设我有一堆产品。每个产品都有由多个段落组成的 ID、价格和详细描述。每个产品还有多个代表不同尺寸和颜色的 sku 编号。
澄清一下:product_id 1 有 3 个 sku,product_id 2 有 5 个 sku。产品 1 中的所有 sku 具有相同的价格和描述。产品 2 的价格和描述与产品 1 不同。产品 2 的所有 sku 共享产品 2 的价格和描述。
我可以有一个大表,每个 sku 都有不同的记录。这些记录会有冗长的字段,例如详细的描述和价格。
或者我可以有两张桌子。一个名为“产品”的产品,带有产品 ID、价格和描述。还有一个名为“skus”,带有 product_id、sku、color 和 size。然后我会加入 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 列上对所有 sku 进行 LIKE 搜索。我想比较一张有 5000 个 long_description 和 5000 个 sku 的表与 OUTER JOINing 两张表,一个有 1000 个 long_description 记录,另一个有 5000 个 sku。
【问题讨论】:
-
一般来说,关于 SQL 的假设性“性能更好”的问题是不可能回答的。变量太多,其中很多取决于使用情况。请问一个更具体的问题。我们需要知道将运行什么样的查询、插入与选择的频率、索引结构、并发性等。
-
性能做什么?只是列出所有内容?更新产品描述?添加新 SKU?
-
在搜索表方面的性能。让我们使用 select/where color='green' 示例。拥有一个包含 5,000 个长描述的表,其中 1000 个是不同的,是否会比连接两个表(一个表只有 1000 个长描述)更慢选择查询?