2010-04-29 47 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。这是可以理解的更复杂和更慢。