gpt4 book ai didi

mysql - 我应该标准化 2000 万行 x 2 列的 MySQL 表吗

转载 作者:行者123 更新时间:2023-11-29 07:06:42 24 4
gpt4 key购买 nike

我有一个 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分区

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

最佳答案

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

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

您还询问了PARTITION BY RANGE。恕我直言,2000 万行并不是一个大表。

在我管理的数据库中,我按日期对一个表进行分区,因为它有 47 亿行(即表大小的 235 倍)。还有相当多的其他表有数百万行,但它们在没有分区的情况下也很好。

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

关于mysql - 我应该标准化 2000 万行 x 2 列的 MySQL 表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com