MySQL数据库设计-存储图像-单表或多表

标签 mysql performance database-design architecture code-maintainability

我目前在一个产品中工作,其中有不同类型的图像,如产品图像、用户个人资料图片、 Logo 等。 我需要一个具有良好查询性能的数据库。

我想到了两个数据库设计。

选项 1. - 将所有图像存储在带有 id、标题、url_full、url_thumb、状态和时间戳字段的单个表中

优点

  1. 我可以使用单个 ImageModel 文件来插入删除/更新数据。所以图像存储不会有多重逻辑。它只是一个单一的逻辑,“存储在一个表中”。因此,每当必须保存图像时,我都可以调用 ImageModel 的方法

缺点

  1. 如果产品图片多而用户图片少,由于产品数量庞大,用户图片查询会变慢。

选项 2.- 使用 id、title、url_full、url_thumb、status 和 timestamp 字段将不同类型的图像存储在不同的表中

优点

  1. 增加一个section的记录数不会影响其他section的查询速度

缺点

  1. 必须为每种图像类型编写单独的模型文件/函数。
  2. 每当必须存储图像时,都需要指定类型。

我的问题是,哪种方法更好。优点和缺点是一个真正的问题。如果还有任何其他优点/缺点,请列出。 或者还有其他神db设计,请指教。

请结合产品多、用户多的实际场景回答。

最佳答案

这开始是一个很长的评论,所以我决定将其作为答案发布。在不同的表中存储不同类型的图像对我来说是个坏主意。一方面,如果稍后出现新的类别,该设计将如何扩展?那么您是否能够应对添加任意数量的新图像表?此外,查询所有图像需要一系列连接或并集,这可能代价高昂。

您提到了多图像表架构的以下优势:

Increased number of records in one section won't affect the query speed of other

如果您在 type 列上使用带有索引的单个图像表,那么增加一种类型的记录数不一定会增加对第二种类型图像的查询。这是您提供的单个图像表的缺点:

If there are lot of product images and less user images, the user image querying will become slow due to the huge number of products.

的确,添加更多记录通常会减慢查询速度。然而,在类型上有一个适当的索引应该可以大大减少这个问题。

具有适当索引的单个图像表似乎要好得多。

关于MySQL数据库设计-存储图像-单表或多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674012/

相关文章:

c# - .Net C# 连接器/NET 查询参数不起作用

php - 从 DateTime php 获取总秒数

java - Android内存泄漏异常

java - TCP/IP 应用程序 Keepalive 大小和带宽开销

sql - 在 PostgreSQL 中实现多对多关系的最佳方式是什么?

java - 在java中单个语句中执行多个查询

php - 语法错误或访问冲突 : 1064

sql - 使用单个连接查询而不是多个查询来提高性能?

php - MySQL 创建限制值出现次数的列

php - 将 Open ID 与我当前的登录系统合并?