2012-09-05 61 views
0

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

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

我的问题是,表格的大小是否会影响性能?我担心需要更多内存来缓存表格。

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

+1

'name_upper'只是多余的!为什么不直接进行不区分大小写的比较而不是添加新列?关于SQLite性能,这里是基准报告(它们是古老的,但你有一个想法)http://www.sqlite.org/speed.html。如果'name'是你的表唯一索引,你可能想考虑为索引设置一些'int'列。 – omggs

回答

0

如果您的查询实际上读取了所有的表,则表格大小会影响性能;如果可以通过单独检查索引来应对搜索,则性能保持不变。

通常,I/O主导运行时。 即使您的数据适合缓存,整理函数的运行时间也不可能引人注目,因为大多数使用索引的查找都使用二分搜索,即只比较几条记录。

相关问题