sqlite3 表大小会影响性能吗?

Posted

技术标签:

【中文标题】sqlite3 表大小会影响性能吗?【英文标题】:Does sqlite3 table size affect performance? 【发布时间】:2012-09-05 07:05:19 【问题描述】:

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

原来“name”字段是迄今为止表中最大的字段,所以通过定义一个“name_upper”字段,我基本上把表的大小翻了一番。与数据库文件所在的磁盘大小相比,数据库的大小仍然很小,但与内存大小相比,它可能会变大。

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

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

【问题讨论】:

name_upper 只是多余的!为什么不只进行不区分大小写的比较而不是添加新列?关于 SQLite 性能,这里是基准报告(它们很古老,但你知道)sqlite.org/speed.html。如果name 是您的表的唯一索引,您可能需要考虑为索引设置一些int 列。 【参考方案1】:

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

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

【讨论】:

以上是关于sqlite3 表大小会影响性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 TinyInt 还是 Bit 对 SQL Server 有影响吗?大小和查询性能

sqlite3 视图影响性能?

如何清除 ibdata1 文件以及它如何影响性能?

Bigquery:数据集中的大量表会影响性能吗?

mysql区分表名区分大小写吗

sql语句大小写有关系吗?