SQLite:行VS列的性能

时间:2011-10-08 01:31:06

标签: database sqlite tags normalization normalize

我有一个数据库表,其中每一行(电影)都有几个数字标签(电影类别)。目前,我将所有这些标签放在同一列中作为字符串,并使用%LIKE%搜索它们,当我需要查找特定类别中的所有电影时,这需要慢速全表扫描。

我想加快搜索这些标签,但我能想到的唯一解决方案是创建一个包含两个整数列的第二个表。第一个包含单个类别,第二个包含电影的rowid。

但是,这将需要在数据库中添加更多插入内容。一行平均有10个标签,所以不是插入一行,而是插入11行。由于我的应用程序比实际查询更多插入,因此插入性能至关重要。

有没有其他方法可以解决这个问题,而不会牺牲插入性能?或者插入1列10列VS 10行2列没有什么大不同?

1 个答案:

答案 0 :(得分:1)

您的插入性能会稍慢,因为索引需要更新(至少它会在ROWID上有一个索引,并且您需要一个类别ID索引才能获得显着的加速)。数据大小本身很简单。

但是,我希望它与交易开销完全相形见绌(所有对fsync()的调用都是如此)。对于并发写入繁重的负载,SQLite很糟糕。

如果您执行的插入次数多于查询次数,则可能需要重新考虑数据结构。