我是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;)
组写入交易
索引表
在内存中使用数据库
如果您还没有探索所有这些,那么您的运行速度可能会慢很多倍。