0

我一直试图找出为什么我的 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表中,但这感觉像是一种蛮力方法。有什么建议吗?

4

2 回答 2

0

如果您的 ID 字段是自动递增的,您可以在插入相应记录后立即通过调用sqlite3_last_insert_rowid()C API 或您的语言中的相应函数来获取它们的值。

(也为所有插入使用一个事务。)

于 2012-10-26T16:34:03.553 回答
0

您是否已将问题范围缩小到查询的哪一部分?即,您是否自行运行选择以查看它返回的速度。如果选择很慢,也许看看索引。如果 select 很快,可能它在 MainFrame 表上的索引会减慢插入速度。

于 2012-10-26T19:21:12.657 回答