如何通过超过500,000行国际字符加速sqlite搜索

时间:2012-03-22 21:07:30

标签: sql database sqlite

我有一个名为search_terms的表,其中一个名为term的列具有TEXT类型。还有一个名为id和popular的列。该术语包含国际字符和ASCII字符。 (日语和英语)

我正在尝试使用sqlite快速搜索此表。不幸的是,搜索时间超过5秒。我用类似的东西搜索:

SELECT id from search_terms where term LIKE 'ka%' order by popularity

我理解sqlite LIKE运算符很慢,因为它没有利用索引(bummer)。此外,FTS在这里无法帮助我,因为我不是在寻找完整的单词。它从第一个字母开始,搜索可以继续(使用实时搜索范例)。

其他注意事项。数据库中的数据是静态的。它不会改变。我可以添加表来加快速度,可能,我只是喜欢一些建议。这是一个嵌入式设备,所以它需要尽可能快。假设空间不是问题。

3 个答案:

答案 0 :(得分:1)

如果可能,请使用索引。

create clustered index ix1 on TABLE (term)

create nonclustered index ix1 on TABLE (term)

试一试。

TIZ

答案 1 :(得分:1)

根据文件,SQLite does use an index for LIKE。但是你需要创建一个索引。

答案 2 :(得分:1)

SQLite FTS确实支持前缀搜索:

MATCH 'ka*'

而不是

LIKE 'ka%'

假设表格已更改为FTS表格。