最近用sqlite自带的普通检索,检索大约几十万条数据,速度实在太慢,于是去网上找到了sqlite内置的全文检索,即FTS3/FTS4检索,此文对于FTS3与FTS4检索的区别不做进一步说明。
1. 结论
(1)普通检索:
SELECT * FROM statistics_table WHERE seqnum=1;
(2)全文检索:
SELECT * FROM statistics_table WHERE seqnum MATCH %1
通过大量测试,FTS检索速度大约为普通检索的1000倍。
2. 采用虚拟表的全文检索
(1)首先要创建 VIRTUAL TABLE:
CREATE VIRTUAL TABLE pages USING fts3(title, body);
此虚表 pages 包含 title, body 两个文本字段,此外还有一个 docid 整数型的内置字段(你可以自行为 docid 赋值,也可以插入 NULL 让系统自动分配,类似于普通表的id,可自动赋值)。
(2)插入、修改与删除相关数值,与普通表操作无异。
INSERT INTO pages (docid, title, body) VALUES (1, 'hello, world', '"hello, world"is my first word of my study.');
UPDATE pages SET title='hello, world !' WHERE docid=1;
(3)查询操作:
查询操作是FTS表存在的最大意义,两类查询在FTS表上是比较高效。
- 仅包含rowid的普通查询
SELECT * FROM message WHERE rowid = 2
- 全文检索
SELECT * FROM message WHERE body MATCH '10010'