我一直在试图找出我的SQLite数据库执行速度相对较慢的原因(插入1500条记录需要4秒),我想我已将其缩小到此查询范围。有没有办法优化这个?
"INSERT OR REPLACE INTO MainFrame(WID,PName,PAlias,PModel,FriendID, UniverseID, GalaxyID) VALUES
((SELECT WID FROM Worlds WHERE WName= ?),
@pname,
@palias,
@pmodel,
(SELECT FriendID FROM Friend WHERE FriendName = @eFriend),
(SELECT UniverseID FROM Universes WHERE UniverseName = @eUniverse),
(SELECT GalaxyID FROM Galaxies WHERE GalaxyName = @eGalaxy ))";
如您所见,插入查询中使用了一些Selects
。这是因为循环将数据插入到其他表(WID
,FriendID
,UniverseID
,GalaxyID
)中,所以在插入数据之前我没有这些数据。我需要将这些数据插入到MainFrame
表中,但这感觉就像是一种蛮力的方法。有什么建议吗?
答案 0 :(得分:0)
如果您的ID字段是自动递增的,您可以在插入相应记录后立即通过调用C API中的sqlite3_last_insert_rowid()
或您所用语言的相应函数来获取其值。
(对所有插入也使用一个事务。)
答案 1 :(得分:0)
您是否已将其缩小到查询的哪一部分?即你自己运行选择以查看它返回的速度。如果选择很慢,可以查看索引。如果select是快速的,那么MainFrame表上的索引可能会减慢插入速度。