我应该规范化 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 有数百万行,但它们没有被分区就很好。
只要在查找时使用索引或主键,应该没问题。
我有一个 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 有数百万行,但它们没有被分区就很好。
只要在查找时使用索引或主键,应该没问题。