【发布时间】:2012-10-16 22:42:40
【问题描述】:
我一直试图找出为什么我的 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 表中,但这感觉像是一种蛮力方法。有什么建议吗?
【问题讨论】:
-
您是否已将问题范围缩小到查询的哪一部分?即,您是否自行运行选择以查看它返回的速度。如果选择很慢,也许看看索引。如果 select 很快,可能它在 MainFrame 表上的索引会减慢插入速度。
-
@DavidOsborne - 我又进行了几次测试,但似乎即使从 MainFrame 中删除索引后,它仍然需要 4 秒或更长时间。单独的 select 语句足够快。
-
@DavidOsborne - 我从第一个值中索引了
WName列,现在它的速度提高到了 500 毫秒。我担心空间问题,但现在应该足够了。如果您愿意,可以将其作为答案发布,因为建议检查选择是否缓慢。
标签: sql performance sqlite select insert