我是tcl的新手。我已连接到SqLite数据库。

我有大约100,000条记录,要在计算后插入数据库。我使用以下命令将记录插入数据库100,000次。

我确定我在这里做错了。什么是合适的方法?

用于插入:

db eval {insert into table values(value1,value2,value3,value4)}


为了进行检索,我必须执行至少1000次select操作,事情非常缓慢:

db eval {select x as x, y as y from table} {
   set z  [expr $z + $x + $y]
}

最佳答案

默认情况下,每个插入都是单个事务。这很慢。您可以将插入内容分组为100次插入的单个事务,从而大大加快了处理速度。

db eval { BEGIN TRANSACTION }

... do some insertions ...

db eval {  END TRANSACTION }


要么

db transaction {

... do some insertions ...

}


SQLITE开箱即用,非常安全,但是速度很慢。如果您知道自己在做什么,并且愿意冒着磁盘崩溃而导致数据库损坏的风险,那么您可以通过几种优化来提高速度。

特别是:


关闭同步(PRAGMA同步= OFF;)
组写入交易
索引表
在内存中使用数据库


如果您还没有探索所有这些,那么您的运行速度可能会慢很多倍。

07-24 09:49
查看更多