2013-05-29 81 views
0

首先,道歉,如果這已被覆蓋在以前的帖子,我已經錯過了。我做了很多搜索,並沒有遇到任何迄今爲止工作過的東西。SQLite更新基於變量文本的單個值的多行

我目前使用下面的查詢來更新表中的記錄。

UPDATE table SET Column1="1" WHERE Column2 LIKE "Text"; 

的問題是我有超過10萬行,每行不同的文字,更新,甚至做15000在同一時間需要45分鐘。我不熟悉SQL,但我相當肯定這不是更新我需要更新的行的最有效方式。

我一直在嘗試使用其他建議我遇到放在這裏,但到目前爲止沒有工作過。

+0

查詢的預期行爲究竟是什麼?你曾嘗試過的其他建議是什麼? –

+0

該查詢中沒有變量。你的意思是說''文本「'對於不同的行是不同的? –

+0

你有沒有索引?你爲什麼使用'LIKE'而不是'='? –

回答

0

爲了能夠快速查找記錄,需要相關列上的索引。 (詳見Query Planning

在這種特殊情況下,您需要索引Column2LIKE是不區分大小寫的,所以你必須創建一個不區分大小寫的指數,像這樣:

CREATE INDEX MyTable_Column2 ON MyTable(Column2 COLLATE NOCASE); 

此外,Column2必須聲明與TEXTaffinity


將多個更新包裝到一個事務中,否則事務開銷將遠遠大於實際更新所需的時間。


您可以隨時檢查EXPLAIN QUERY PLAN您的查詢是否可以使用索引。

+0

謝謝,我會放棄這一切。至於更新查詢,我應該保持相同還是有改進的方式呢? – KielCC

+0

如果您嘗試使用一條語句更新多條記錄,則SQLite更有可能執行全表掃描。 –

相關問題