我希望通过查询包含EXIF数据的表来获得最佳性能。有问题的查询只会在EXIF数据中搜索指定的字符串,并在匹配时返回行索引。
话虽如此,最好将EXIF数据存储在一个表中,每个标签都有单独的列,或者将所有标签存储在一个列中,因为一个长分隔字符串也适合我? / p>
我将存储大约115个EXIF标签,如果连接成一个字符串,每条记录的长度大约为1500到2000个字符。
答案 0 :(得分:3)
如果将它们全部存储在一个列中,您将无法从索引中获得性能优势。您还将违反数据库设计的基本规则,该规则有其自身的后果(每列只应存储一个数据)。
我可能会使用类似于此的结构:
CREATE TABLE Image_EXIF (
image_id INT,
exif_tag_id INT,
exif_value VARCHAR(100), -- I don't know what an appropriate size would really be
CONSTRAINT PK_Image_EXIF PRIMARY KEY CLUSTERED (image_id, exif_tag_id),
CONSTRAINT FK_Image_EXIF_image_id FOREIGN KEY image_id REFERENCES Images (image_id),
CONSTRAINT FK_Image_EXIF_exif_tag_id FOREIGN KEY exif_tag_id REFERENCES EXIF_Tags (exif_tag_id)
)
EXIF_Tags表将包含所有有效标记,而Images表将保存图像。然后,您可以在exif_tag_id
列和exif_value
列上添加索引,以便快速搜索。