我有一个 sqlite db,目前只有几个表,其中最大的一个有超过 10,000 行。该表有四列:id、term、definition、category。我使用了 FTS3 模块来加快搜索速度,这很有帮助。但是,现在当我尝试从表中获取“下一个”或“上一个”行时,它需要的时间比我开始使用 FTS3 之前要长。
这就是我创建虚拟表的方式:
CREATE VIRTUAL TABLE profanity USING fts3(_id integer primary key,name text,definition text,category text);
这就是我获取下一行/上一行的方式:
SELECT * FROM dictionary WHERE _id < "+id + " ORDER BY _id DESC LIMIT 1
SELECT * FROM dictionary WHERE _id > "+id + " ORDER BY _id LIMIT 1
当我在虚拟表上运行这些语句时:
- 下一个术语是在~300ms内获取,
- 上一个术语是在~200ms内获取
当我使用普通表(没有 FTS3 创建的表)执行此操作时:
- 下一个术语是在~3ms内获取,
- 上一个术语是在~2ms内获取
为什么会有这么大的差异?有什么办法可以提高这个速度吗?
编辑:
我仍然无法让它工作!