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、挿入クエリで使用されているものがいくつかあります。この理由は、ループが他のテーブル ( WIDFriendID、 )UniverseIDにデータを挿入するGalaxyIDためです。挿入されるまでそのデータはありません。このデータをテーブルに挿入する必要がありMainFrameますが、これは力ずくのアプローチのように感じます。何かアドバイス?

4

2 に答える 2

0

sqlite3_last_insert_rowid()ID フィールドが自動インクリメントされている場合、C API または言語の対応する関数を呼び出して、それぞれのレコードを挿入した直後に値を取得できます。

(また、すべての挿入に対して 1 つのトランザクションを使用します。)

于 2012-10-26T16:34:03.553 に答える
0

クエリのどの部分に問題があるかを絞り込みましたか? つまり、選択を単独で実行して、それがどれだけ速く返されるかを確認します。選択が遅い場合は、インデックスを見てください。選択が速い場合は、メインフレーム テーブルのインデックスが挿入を遅らせている可能性があります。

于 2012-10-26T19:21:12.657 に答える