2013-03-19 39 views
2

實際數據計數是60K,在我使用下面的查詢使用SQLLite從60K數據刪除50條記錄需要更多的時間(17560毫秒)

Delete from Analysis where AnalysisKey in (34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67, 68,69,60,61,62,63,64,65,66,67,68,69,70,71,72,73) 

如何使更快地刪除那些只刪除50條記錄記錄?

+3

聽起來像你需要一個更好的索引在你的桌子上。你有索引嗎? – Nick 2013-03-19 12:23:23

+0

它是否總是被命令?那麼也許你可以使用'AnalysisKey BETWEEN 34 AND 73'或者至少'AnalysisKey> = 34 AND AnalysisKey <= 73'。還有指數! – Corak 2013-03-19 12:26:13

+0

我懷疑性能滯後不是IN(...)和BETWEEN之間的微小差異,而是在尋找AnalysisKey匹配的全表掃描中。是AnalysisKey索引?它被定義爲主鍵嗎? – Tim 2013-03-19 12:35:29

回答

2

我以前從不使用sqlite,但不能使用between

Delete from Analysis where AnalysisKey between 34 and 73 
+1

是的,SQLite有'BETWEEN'運算符。 – 2013-03-19 12:28:54

0

如果刪除大量行而未提交事務,幾乎所有數據庫之間的執行都會很慢。

另一方面,選擇要刪除的行可能是一個問題。用適當的工具檢查你的查詢性能,並確保你有適當的索引。

相關問題