查询id数组的最快方法是什么?

问题描述 投票:0回答:1

我正在为我的一个项目构建一个数据库。目前,我有一张带图像的桌子和一张带产品的桌子。

product
 Column         |   Type    | 
----------------+-----------+
 id             | integer   |
 images         | integer[] | 
 display_image  | integer   | 
 ...

image
 Column         |   Type    | 
----------------+-----------+
 id             | integer   |
 data           | text      | 

因此,基本思想是在product.images字段中存储属于一个产品的所有图像的ID。数据库的用例是查找特定图像的相应产品。另外,一个图像可以属于多个产品。

现在我不确定这是否是获得结果的最快方法,如果我查询哪些产品属于图像,数据库将容纳数百万的产品和图像。有一个额外的field image.products,我存储与一个图像相关的所有产品会更快吗?

获取特定图像产品的查询目前看起来像这样(我使用PostgreSQL作为数据库):

SELECT * from product where image.id = ANY(product.images)

拥有另一个需要维护的字段将是API方面的负担。在我为此进行重构之前,如果上面提到的查询稍后会对性能产生影响,我希望听到经验丰富的意见。

提前感谢您的回复。

sql database postgresql
1个回答
0
投票

对于像这样的一对多关系(每个产品只有一个图像,但每个图像可以有多个产品),最好只使用image_id上的外键。

您只需要一个多对多关联表,如果产品可能有多个图像,并且图像可能与多个产品相关联。如果是这种情况,请使用名为product_images_assoc的表格,其中包含两列product_idimage_id

使用此关联表,很容易获得任何一个image_id的所有product_ids,反之亦然。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.