索引字符串列中中型数据库的正常插入时间是多少?

时间:2012-08-14 10:46:04

标签: database performance sqlite

我有一个只有一个表(大约50,000行)的sqlite数据库,我经常使用Java和sqlitejdbc对它执行update-otherwise-insert操作(即如果存在则尝试更新行,否则插入新行)。我的表类似于带有“word”和“frequency”列的单词频率表,没有主键!

问题是我执行此更新 - 否则 - 插入操作数十万次,平均插入或更新操作需要超过2毫秒。甚至有时候插入操作需要大约20毫秒。我还应该提一下,该表在列上有一个索引,我在其中使用插入操作中的“where”子句(“word”列“),这自然应该使插入操作更加昂贵。

首先,我想确保在带有50,000行的索引表上进行插入操作的2ms是否正常,并且没有任何我错过的内容,之后任何提高性能的建议都非常受欢迎。让我感到震惊的是,在执行大量的插入操作之前删除索引并在之后再次重新创建它是很好的做法,但我不能在这里做,因为我需要检查是否已经存在具有相同单词的行。

我知道所有关于“它取决于硬件”和“它取决于你的代码的其余部分”等等的东西,但我真的认为一个CAN可以知道插入操作应该在平均电脑上花多少钱

1 个答案:

答案 0 :(得分:0)

我部分解决了我的问题。对于有兴趣回答此问题的任何人,this链接都会有所帮助。简而言之,在sqlite中关闭日志模式(" pragma journal_mode = OFF")可以显着提高插入性能(几乎是我之前速度的四倍),使代码容易导致数据丢失意外关机的情况。

对于正常插入速度,它比2ms /操作快。使用正确的pragma指令,每秒可以达到数十万次插入操作,充分利用事务等。