私は私のプロジェクトのデータベースを構築しています。現在、私はイメージを持つテーブルと製品を備えたテーブルを持っています。IDの配列をクエリする最も速い方法は何ですか?
product
Column | Type |
----------------+-----------+
id | integer |
images | integer[] |
display_image | integer |
...
image
Column | Type |
----------------+-----------+
id | integer |
data | text |
基本的な考え方は、1つの製品に属するすべての画像のIDをproduct.imagesフィールドに格納することです。特定のイメージに対応する製品を見つけるためのデータベースの使用例です。さらに、1つのイメージは複数の製品に属することができます。
どの製品がイメージに属しているかを照会し、データベースが何百万もの製品と画像を保持する場合、これが最も速い結果を得る方法であるかどうかはわかりません。 1つのイメージに関連付けられているすべての製品を保存する場所にimage.productsというフィールドを追加する方が速いでしょうか?
(私はデータベースとしてPostgreSQLのを使用しています)現在、次のようになり、特定の画像のための製品を取得するクエリ:
SELECT * from product where image.id = ANY(product.images)
の負担になり維持する必要がある別のフィールドを持ちますAPI側。このリファクタリングを行う前に、上記のクエリで後でパフォーマンスに影響を及ぼす可能性がある場合は、経験豊富な意見を聞きたいと思います。
返信いただきありがとうございます。
ああ、古い「区切られた列」の質問。 SQLは、それが実行されている基本的な哲学/数学(データベース - SQLの実装 - これが役に立つと思われるタイプを提供するのに便利なことがあることが時々あります)に反するため、これを処理しないように明示されています。あなたが自分のテーブルにイメージキーを引き出すと、データベースは最も速くなります。 [この質問も参照](https://stackoverflow.com/q/3653462/812837)。 [このページの下部にあるヒント](https://www.postgresql.org/docs/current/static/arrays.html)を見てください。 –