我有一个名为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在这里无法帮助我,因为我不是在寻找完整的单词。它从第一个字母开始,搜索可以继续(使用实时搜索范例)。
其他注意事项。数据库中的数据是静态的。它不会改变。我可以添加表来加快速度,可能,我只是喜欢一些建议。这是一个嵌入式设备,所以它需要尽可能快。假设空间不是问题。
答案 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表格。