我是tcl的新手。我已经连接到一个SqLite数据库。
我有大约100,000条记录,我想在计算后插入数据库。我使用以下命令将记录插入数据库100,000次。
我肯定我做错了什么。怎样做才是合适的呢?
插入:
db eval {insert into table values(value1,value2,value3,value4)}
对于检索,我必须做至少1000次选择操作,事情非常慢:
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 synchronous = off;)
- 组写入事务 <
- 索引表/gh>
- 在内存中使用数据库