我有一个只有一个表(大约 50,000 行)的 sqlite 数据库,我经常使用 Java 和 sqlitejdbc 对其执行更新 - 否则 - 插入操作(即,如果行存在,我会尝试更新行,否则插入新行)。我的表类似于带有“word”和“frequency”列的词频表,并且没有主键!
问题是我执行了数十万次更新否则插入操作,平均插入或更新操作需要超过 2 毫秒。甚至有时插入操作需要大约 20 毫秒。我还应该提到,该表在我在插入操作中使用“where”子句的列(“word”列)上有一个索引,这自然会使插入操作更加昂贵。
首先,我想确保对具有 50,000 行的索引表进行插入操作的 2 毫秒是否正常,并且我没有遗漏任何内容,之后任何提高性能的建议都非常受欢迎。让我感到震惊的是,在执行大量插入操作之前删除索引并在之后重新创建它是一种很好的做法,但我不能在这里这样做,因为我需要检查是否已经存在具有相同单词的行。
我知道所有关于“它取决于硬件”和“它取决于你的代码的其余部分”等的东西,但我真的认为人们可以知道插入操作在普通电脑上应该花费多少。