我有一个大型 sqlite3 (3.6.22) 数据库(大约 1 GB,500 万行),单个表在一列上建立索引。问题是执行典型 INSERT 事务的时间波动很大。我一次插入大约 10000 行(当然包含在事务中)。通常它需要大约 1.5 秒,但大约每五个事务突然需要几分钟才能完成相同的事务。我做了很多实验,发现只有有索引才会出现这种现象,这让我觉得更新索引需要很多时间。
我需要更一致的表现。如果我只能避免某些事务突然比前一个事务花费 200 倍的时间,那么平均插入时间再高一点就可以了……我该怎么办?
这是架构。blocks.md5 中的字符串总是正好 32 个字节长并且可能是唯一的。rolling.value 列将包含非常大的 64 位整数。
CREATE TABLE blocks (blob char(32) NOT NULL,
offset long NOT NULL,
md5 char(32) NOT NULL,
row_md5 char(32));
CREATE TABLE rolling (value INT NOT NULL);
CREATE INDEX index_md5 ON blocks (md5);
CREATE UNIQUE INDEX index_rolling ON rolling (value);