2014-10-28 51 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