在SQLite查询中使用LIMIT没有性能提升?

时间:2014-10-28 14:10:56

标签: android performance sqlite limit prefix

我有一个SQLT数据库,按字母顺序排列460.000个单词,我想检查是否有一个以某个特定字母或前缀开头的单词。

SELECT word FROM en WHERE word like 't%' LIMIT 1

我希望此查询返回以t开头的第一个单词。问题是在Android OS上,这个查询很慢。如果我将其更改为:

SELECT word FROM en WHERE word like 'trick%' LIMIT 1

它运行得非常快。区别在于有27.300个单词以“t”开头,只有60个单词以“trick”开头。

我希望LIMIT 1能够停止搜索并返回第一个命中。但显然这不是它的工作原理。数据库已正确编入索引:

CREATE TABLE "en" (
     "word" text(12,0) NOT NULL COLLATE NOCASE,
    PRIMARY KEY("word")
);

我遇到了这个问题。有什么建议吗?

执行查询的代码是用Unity编写的:

public bool CheckIfWordListContainsAWordThatStartsWith (string word)
{
    string query = "SELECT word FROM en WHERE word LIKE '" + word + "%' LIMIT 1";
    SQLiteQuery qr = new SQLiteQuery(db, query);

    if (qr.Step())
    {
        // string result = qr.GetString("word"); // No need to take care of the actual result
        qr.Release();         
        return true;
    }
    qr.Release();         
    return false;
}

0 个答案:

没有答案