Sqlite3比grep慢约6倍

3

我有一个包含1.88亿行的表格,以及一个包含1.88亿行的文本文件,如下所示:

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 的速度?


尝试使用BerkleyDB吧。它应该比SQLite更快,并且针对类似的工作流程。 - Haleemur Ali
有哪些版本、操作系统、配置等等? - Tom Morris
最新的Linux Ubuntu和grep sqlite3,但是Larry Lustig先生的答案只用了0.002秒就执行完毕了! - John
1个回答

7

创建索引:

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.002秒! - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接