2010-04-29 46 views
2

一個約100k行的表。SQLite FTS3不一致的性能

SELECT word FROM entries WHERE word MATCH '"chicken *"'; 
17 results in 46ms 
SELECT word FROM entries WHERE word MATCH '"chicken f*"'; 
2 results in 5793ms 

爲什麼如此巨大的下降?

+0

以下是一些閱讀以增強s01ipsist的回答:http://www.sqlite.org/fts3.html#tokenizer – Tim 2011-09-26 23:47:27

回答

2

「雞*」中的通配符可以有效地忽略,因爲它匹配任何令牌。搜索是在逆向索引中的簡單查找。

「chicken f *」中的通配符需要找到所有以f開頭的單詞,也包含單詞chicken。這是可以理解的更復雜和更慢。