2014-10-28 50 views
3

我有188萬線和188萬線的文本文件的錶慢,如下圖所示SQLITE3:約6X比grep的

CREATE TABLE trigram (count integer, A text, B text, C text) 
time echo 'select * from trigram where C="mailman";'|sqlite3 3g.db 
18.419 seconds. 
time grep 'mailman$' N-Grams/3g 
3.137 seconds 

或類似

更復雜的查詢
time grep 'the [^ ]* mailman$' N-Grams/3g 
2.879 seconds 
time echo 'select * from trigram where A="the" and C="mailman";'|sqlite3 3g.db 
15.839 seconds 

是有什麼辦法可以加速sqlite3

+0

給berkleydb一個嘗試。它應該比sqlite更快,並且瞄準類似的工作流程。 – 2014-10-28 02:35:54

+0

什麼版本,操作系統,配置等...? – 2014-11-03 06:24:53

+0

最新Linux Ubuntu和grep sqlite3,但Larry Lustig先生的答案在0.002s執行! – John 2014-11-04 16:03:42

回答

6

創建索引:

CREATE INDEX idx_trigram_col_c ON trigram(C); 

,然後再試一次。

你可以得到更多的速度與覆蓋索引第二個查詢:

CREATE INDEX idx_trigram_col_c ON trigram(C, A); 

CREATE INDEX idx_trigram_col_c ON trigram(A, C); 

(如果列有不同的分佈,把一個具有更多價值第一)。

+0

你是救星!非常感謝! 0.002秒! – John 2014-10-28 03:07:42