我正在使用sqlite3作为数据库。数据库有一个表,它使用“name”字段作为索引,它是一个UTF-8字符串。为了进行不区分大小写的比较,我添加了一个名为“name_upper”的新列,它只是“name”字段的UTF-8大写版本,并将其用作索引。
事实证明,“name”字段是表中最大的字段,因此通过定义“name_upper”字段,我基本上将表的大小加倍。与数据库文件所在的磁盘大小相比,数据库的大小仍然很小,但与内存大小相比可能会变大。
我的问题是,表的大小加倍会影响性能吗?我担心需要使用更多内存来缓存表。
另一种解决方案是定义一个新的校对函数,该函数执行不区分大小写的UTF-8比较(我知道ICU提供了一个实现)。我不确定在这种情况下会对性能产生什么影响,因为每次比较都需要进行从小写到大写的转换。
答案 0 :(得分:0)
如果您的查询实际读取了所有表格,那么加倍表格的大小会影响性能;如果可以通过单独检查索引来回答搜索,则性能保持不变。
通常,I / O支配运行时。 即使您的数据适合缓存,您的校对功能的运行时也不太可能引人注意,因为大多数使用索引的查找都使用二进制搜索,即只比较几条记录。