【问题标题】:Inserting to Sqlite is slow [duplicate]插入Sqlite很慢[重复]
【发布时间】:2015-01-05 06:44:53
【问题描述】:

我是数据库新手。

我想在 sqlite 数据库中插入 22000 个单词,但它需要很长时间才能完成

for (int i=0;i<s.size();i++){               
    String sql = "INSERT INTO WORD (word) VALUES ("+"'"+s.get(i)+"'"+");";
    statement.executeUpdate(sql);
}

表名是WORD,字段名是word(这是一个String) 这里 s 是一个 arrylist 并且 s.get(i) 返回一个字符串...我已建立连接并尝试更新 桌子。

速度很慢。我做错了什么?

【问题讨论】:

  • 如果您尝试批量插入,会有什么变化吗?
  • 您插入了多少次 22 000 个条目?什么是“慢”,例如,实际需要多长时间?
  • 它是另一种编程语言,但看看stackoverflow.com/questions/1711631/…
  • 我不知道为什么,但你可以使用增强的循环。没有那么不同

标签: java sqlite sql-insert mysql-slow-query-log


【解决方案1】:

它很慢,因为您要向数据库发出 22000 个查询。您应该分批插入。这将解决问题。即使单次插入需要 10 毫秒,总时间也像 3.5 分钟!!

一个包含 2 个批次的简单插入查询将如下所示

"INSERT INTO WORD (word) VALUES ("+"'"+s.get(i)+"'"+"), ("+"'"+s.get(i+1)+"'"+");";

这将使时间减少一半。现在您必须以编程方式插入更多这些值。

【讨论】:

  • “可能想要”?你在猜吗?向 OP 解释什么是批量插入以及他将如何完成它不是更好吗?第一句话是“我是新手”,所以他很可能不知道批量插入是什么。
  • 有一个选项可以编辑答案,以防我的答案不足。感谢您指出问题,我会更新它。
猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多