2011-02-28 25 views
0

一個SQLite查詢我一直在試圖運行像一個查詢:使用多個連接在C#

Insert into Members 
SELECT People.id, Names.value., Ages.value FROM People 
LEFT JOIN Names on Names.id = People.id 
LEFT JOIN Ages on Ages.id = People.id 

當SQLite的經理(幾秒鐘)執行它運行良好。但是當我在程序中運行它時需要一段不可接受的時間來執行(停止等待它)。我試過我自己的ExecuteNonQuery包裝器(對於類)以及command.ExecuteNonQuery()

所有其他查詢(包括連接/插入)都可以正常工作,它只是這一部分。我試過做連接作爲視圖,tempTables各種查詢變化,這在SQLite經理,但不是我的解決方案:(

我的數據目前只有幾千行,但將超過一百萬時這是一個一次性的查詢作爲數據導入的一部分,我使用的是System.Data.SQLite。

是否有任何已知的問題用這種方法進行多個連接/大插入?(我的其他查詢返回的小得多結果結果)我應該調查的LINQ或類似的(看相關的問題)。

感謝。

回答

1

你代碼將查詢傳遞給SQLite驅動程序,因此如果從代碼運行查詢的速度比SQLite Manager慢很多,則應該檢查是否有驅動程序更新。

你可以嘗試在這兩個SQLite的經理執行explain insert into members (...)explain +您的整個查詢),並從你的代碼,並比較結果。這樣你就可以看到是否選擇了比其他更好的策略。

此外,請確保您在所有id字段上都有索引,因爲這些字段提供了很好的性能優勢。

Linq通常不會比普通查詢更快。

+0

感謝堆。我只是做了索引,現在插入速度非常快!我知道這是顯而易見的......我在完成所有導入後立即創建了所有索引,並認爲我會最大限度地提高插入性能......由於我的導入過程是一種有效的批量插入,並且應用程序只讀一次導入我想我總體我沒有節省任何時間...再次感謝,這是顯而易見的和noob錯誤,但我需要有人告訴我:) – DougF 2011-03-02 10:22:13

+0

爲什麼提到Linq?在問題或答案中我沒有看到任何linq。 – 2013-09-21 13:34:48

+0

@AndrewArnott「我應該調查Linq還是類似的(查看相關問題)。」看問題的最後一行。 – 2013-09-21 17:51:29