【发布时间】:2017-05-12 05:18:39
【问题描述】:
我有一个 MySQL 表,其中包含 2000 万行和 2 列,结构如下所示。
item_id (unsigned int[11] PK) | item_name (varchar[50]) | image_path (varchar[50])
我是否应该将image_path 列分隔到另一个表中,例如
image_id | image_path
什么是性能增益/损失? join 请求是否会比 select * 请求在这个大型数据集上仅针对一个表更快?
我的数据库目前只有一张表。如果我正常化,它将是两个。
我的请求会是这样的
SELECT items.item_name, images.image_path
FROM items
LEFT JOIN images on images.image_id = items.image_id
WHERE item_id = 123
我目前正在使用
SELECT item_name, image_path FROM items WHERE item_id = 123
对我来说另一个困难的选择是 MySQL 分区我的表使用 RANGE 分区
什么是性能的最佳方式?
【问题讨论】:
-
恕我直言,除非您向我们展示数据库设计中的其他表,否则您的问题没有任何意义。请edit 向我们展示您将在潜在的
JOIN操作中使用的表。 -
每件商品可以有多张图片吗?如果没有,那么创建另一个表就没有意义了。如果是,那么您应该创建一个单独的图像表。此外,如果您对许多项目使用相同的图像,那么您应该再次考虑使用单独的表格。
-
@Shadow 我每件商品不超过一张图片。你能为你的答案提供一些资源吗?
-
通过 BCNF 标准化是基于函数依赖的。您认为表“项目”具有哪些功能依赖关系?
-
引入代理键作为一组值的紧凑表示与数据库规范化无关。
标签: mysql normalization database-normalization