我应该规范化 2000 万行 x 2 列 MySQL table

Should I normalize 20 millions row x 2 column MySQL table

我有一个 MySQL table,其中包含 2000 万行和 2 列,结构如下。

item_id (unsigned int[11] PK) | item_name (varchar[50]) | image_path (varchar[50])

我应该将 image_path 列分隔到另一个 table 列吗,比如

image_id | image_path

性能增益/损失是什么? join 请求是否会比 select * 仅请求一个 table 请求更快?

我的数据库目前只有一个 table。如果我标准化,它将是两个。

我的要求会像

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 分区 我的 table 与 RANGE 分区

提高性能的最佳方法是什么?

在您显示的查询中,您通过主键值 123 在 items 中查找一行,然后通过主键值连接到 images 中的一行。这是两个主键值查找,而您本可以完成一个。

在 MySQL 的默认存储引擎 InnoDB 中,NULL 值不占用任何存储空间 space。所以我建议,如果您的一些项目行有一个 image_path 而有些没有,那么只需将 image_path 定义为可为空。这对性能来说肯定会更好。

你也问PARTITION BY RANGE。恕我直言,2000万行不算大table.

在我管理的数据库中,我按日期对一个 table 进行了分区,因为它有 4.7 亿 行(即 table 大小的 235 倍) .有相当多的其他 tables 有数百万行,但它们没有被分区就很好。

只要在查找时使用索引或主键,应该没问题。