使用仅包含特定表中的VARCHAR值的数据库时,如何在更新此类表时提高性能?如何在SQLite上处理仅具有VARCHAR值的数据时提高性能?
我更新这样的表的问题是,当获取新数据时,必须决定是否要INSERT
或UPDATE
这样的行,但是对于至少有1000行以上的大表可以做什么?
如果表格很小,我会发现只需执行SQL查询就可以轻松查找新值是否已存在,并根据结果找到INSERT
或UPDATE
。但是,如果你获得100多条新的数据行,其中一些可能已经或可能不在数据库中,有些可能是全新的,但我担心这么多的查询会花费不必要的时间完成。
可以删除数据库中共享某个值的所有内容,比如说相同的日期,因为新数据可能比单独查询每行更好?
实施例:
1 2 3 ... 20
01/01 A1 A2 A3 ... A20
01/02 B1 B2 B3 ... B20
...
01/31 Z1 Z2 Z3 ... Z20
更新后:
1 2 3 ... 20
01/01 A4 A5 A6 ... A23
01/02 B1 B2 B3 ... B20
...
01/31 Z1 Z5 Z6 ... Z20
实施例2:
1 2 3 ... 20
01/01 A1 ... A20
01/02 B1 B2 B3 ... B20
...
01/31 Z1 Z3 ... Z20
实施例2更新后:
1 2 3 ... 20
01/01 A4 A5 A6 ... A23
01/02 B1 B2 B3 ... B20
...
01/31 Z1 Z5 Z6 ... Z20
使用'INSERT OR REPLACE'。 – CommonsWare
进一步使用基于事务的操作,因此您不必为插入/替换的每个项目打开/关闭 – tyczj
另一种方法是添加时间戳列,仅返回最后一行(针对每行),无需更新命令,并最终执行一个过程以除去每条记录的最后一个时间戳。 –