在多列上使用LIKE“%%”提高搜索性能

时间:2013-02-07 16:54:14

标签: iphone sqlite search

我们在iPhone应用程序上使用sqlite。在搜索框中,我们要查询数据库并返回与用户输入内容相关联的任何值。目前,我们正在搜索几个不同的列,如

Gene
Disease
Medicine
Keywords

当搜索文本发生变化时,我们开始使用强制方法调用此方法(带有一些伪代码):

// Basically we do this for our 4 columns we are searching on
    NSString *query2 = [NSString stringWithFormat:@"select * from MedicineList where MedicineList.Keywords like \"%%%@%%\"",searchtext];

    FMResultSet * rs2 = [ _patientAnnotatedDatabase executeQuery:query2];
    while ([rs2 next])
    {
        // if you find anything, put it in a dictionary
    }
    [rs2 close];

这是搜索列并返回结果字典的一种重要方法。它适用于我们的数据集很小的情况。当然,我们的数据集更大,但并不是那么高效。除了在我们正在搜索的列上创建索引之外,还有其他可以执行的性能操作吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

LIKE这样的

%word%模式无法使用普通索引进行优化。

搜索单词是SQLite full text search扩展名的设计目标。