我有一个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;
}