2017-04-23 102 views
0

我目前在健康的時間內按比例更新SQLite數據庫記錄時遇到問題。SQLite記錄更新速度改進

我有一個大約70,000條記錄的小型數據庫,我有一些辦公室個人使用Navicat過濾記錄並進行一些批量編輯提交。當試圖對一個字段中的大量記錄執行UPDATE時,所有內容都會進行爬網,當我查看原始SQL查詢時,我可以看到程序正在使用UPDATE ..SET .. WHERE來執行這些操作。

我的問題是我能做些什麼來幫助這個查詢運行得更快?我在用於匹配記錄更新的列上有一個SQLite自動索引,但我已經閱讀和搜索了所有內容,並且還沒有看到任何其他解決方案,然後我已經有了。更新20000個記錄中的一個字段實際上花費了近3個小時......不管是否使用Navicat。整個數據庫只有30mb,所以我必須做出錯誤的事情。

所有其他數據庫操作運行良好,快速,不知道什麼是錯誤的,並尋找從SQLite獸醫的指導。

+0

帶有一個非零量的數據損壞的額外風險那個UPDATE是否使用子查詢? –

+0

我可以從原始輸出中看到的一個示例是:UPDATE表SET列= 1.0 WHERE(column_value ='value') column_value是一個SQLite自動索引列,如果重要的話... –

回答

0

SQLite的表現很差,原因很簡單,但我經歷了幾乎相同的事情。首先,如果您正在對索引列進行全表更新,那麼您會顛覆整個索引,同時使索引變得毫無用處。在更新之前刪除索引,然後重新創建索引。

此外,還可以通過改變同步PRAGMA得到一些嚴重PERF提升,但它崩潰(在我的經驗非常不可能)

PRAGMA schema.synchronous = 0 
+0

我嘗試編輯架構看看它是否有幫助。就索引而言,我沒有更新索引的列。我正在更新另一個字段,但在用於匹配需要更新的記錄的列上有一個sqlite_auto_index。無論如何,模式設置是否足以使更新緩慢的一切? –