代码之家  ›  专栏  ›  技术社区  ›  yanchenko

sqlite fts3性能不一致

  •  2
  • yanchenko  · 技术社区  · 14 年前

    大约有10万行的桌子。

    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
    

    为什么会有这么大的降幅?

    1 回复  |  直到 13 年前
        1
  •  2
  •   s01ipsist    14 年前

    “chicken*”中的通配符可以有效地忽略,因为它完全匹配任何标记。搜索是反向索引中的一个简单查找。

    “chicken f*”中的通配符需要找到所有单词以f开头的条目,这些条目还包含单词chicken。这是可以理解的更加复杂和缓慢。