优化此插入SQL查询

时间:2012-10-26 16:25:51

标签: sql performance sqlite select insert

我一直在试图找出我的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。这是因为循环将数据插入到其他表(WIDFriendIDUniverseIDGalaxyID)中,所以在插入数据之前我没有这些数据。我需要将这些数据插入到MainFrame表中,但这感觉就像是一种蛮力的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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