0

我正在使用 sqlite3 作为数据库。数据库有一个表,它使用“名称”字段作为索引,它是一个 UTF-8 字符串。为了进行不区分大小写的比较,我添加了一个名为“name_upper”的新列,它只是“name”字段的 UTF-8 大写版本,并将其用作索引。

事实证明,“name”字段是迄今为止表中最大的字段,因此通过定义“name_upper”字段,我基本上将表的大小增加了一倍。与数据库文件所在的磁盘大小相比,数据库的大小仍然很小,但与内存大小相比,它可能会变大。

我的问题是,表的大小加倍会影响性能吗?我担心需要使用更多内存来缓存表。

另一种解决方案是定义一个新的排序函数来执行不区分大小写的 UTF-8 比较(我知道 ICU 提供了一个实现)。我不确定在这种情况下会对性能产生什么影响,因为每次比较都需要进行从小写到大写的转换。

4

1 回答 1

0

如果您的查询实际上读取了所有表,则将表的大小加倍会影响性能;如果仅通过检查索引即可回答搜索,则性能保持不变。

通常,I/O 支配运行时。即使您的数据适合缓存,您的排序函数的运行时间也不太可能引起注意,因为大多数使用索引的查找都使用二进制搜索,即只比较少数记录。

于 2012-09-05T13:51:58.737 回答