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
为什么如此巨大的下降?
一个约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
为什么如此巨大的下降?
“鸡*”中的通配符可以有效地忽略,因为它匹配任何令牌。搜索是在逆向索引中的简单查找。
“chicken f *”中的通配符需要找到所有以f开头的单词,也包含单词chicken。这是可以理解的更复杂和更慢。
以下是一些阅读以增强s01ipsist的回答:http://www.sqlite.org/fts3.html#tokenizer – Tim 2011-09-26 23:47:27