【发布时间】:2016-07-01 08:58:16
【问题描述】:
什么是 MySQL 模糊搜索的 Big-O?它是否因索引类型而异,如果有,什么表现最好?
例如SELECT * FROM foo WHERE field1 LIKE '%ello Wo%';
我不确定底层数据类型,它拥有什么样的魔力。像 trie (https://en.wikipedia.org/wiki/Trie) 这样的东西对于最后模糊的搜索会很好,例如LIKE 'Hello Wo%'.
我猜 Big-O 是O(n),但希望确认一下。甚至模糊搜索之间也可能存在差异,例如%ello Wo% vs. Hello W% vs. %lo World vs. %ell%o%W%or%
是否有不同的索引方法可以提供更好的性能?如果是的话,对于特殊情况,你能分享一下吗?
【问题讨论】:
-
全文搜索使用ranking with vector spaces。似乎大多数模糊搜索算法都针对亚线性(
O(log n)),并在实践中运行,但理论上是O(n)。参见例如this relevant blog post.
标签: mysql database indexing big-o fuzzy-search