假设我有一个相当简单的应用程序,允许用户在他们拥有的DVD上存储信息(标题,演员,年份,描述等),我想允许用户通过任何这些领域搜索他们的收藏(例如"基努·里维斯")或"矩阵"将是有效的搜索查询).
使用SQL全文搜索与简单地用空格分割查询并在SQL语句中执行一些"LIKE"子句有什么好处?它只是表现更好还是实际上会返回更准确的结果?
全文搜索可能会更快,因为它将从用于查找记录的单词索引中受益,而使用LIKE将需要全表扫描.
在某些情况下,LIKE将更准确,因为LIKE"%The%"和LIKE"%Matrix"将选择"The Matrix"而不是"Matrix Reloaded",而全文搜索将忽略"The"并返回两者.这说两者都可能是一个更好的结果.
全文索引(索引)比使用LIKE(每次基本检查每一行)要快得多.但是,如果您知道数据库很小,则可能不需要使用全文索引.确定这一点的唯一方法是通过一些智能平均和基于该信息的一些测试.
准确性是一个不同的问题.全文索引允许您做几件事(加权,自动匹配吃/吃/吃等),你不可能在任何合理的时间范围内使用LIKE实现它.真正的问题是你是否需要这些功能.
如果不阅读全文文档对这些功能的描述,您真的不知道应该如何继续.所以,读一读!
此外,一些基本的测试(在表中插入一堆行,可能带有某种公共字典作为单词的来源)将大大有助于您做出决定.
全文搜索查询要快得多.特别是在各种列中处理大量数据时.
此外,您将获得特定于语言的搜索支持.例如,当存储为"ueber"时,也会发现像"über"中的"ü"这样的德语变音符号.您还可以使用同义词来自动扩展搜索查询,或替换或替换特定短语.
在某些情况下,LIKE将更准确,因为LIKE"%The%"和LIKE"%Matrix"将选择"The Matrix"而不是"Matrix Reloaded",而全文搜索将忽略"The"并返回两者.这说两者都可能是一个更好的结果.
这是不正确的.全文搜索语法允许您指定要搜索的"方式".例如,通过使用CONTAINS语句,您可以使用精确的术语匹配以及模糊匹配,权重等.
因此,如果您遇到性能问题或希望提供更"类似Google"的搜索体验,请选择全文搜索引擎.它也很容易配置.
只需几点说明:
如果您没有使用%启动LIKE,LIKE可以使用索引查找.示例:LIKE'Santa M%'很好!像'%Maria'一样糟糕!并且可以导致表或索引扫描,因为无法以标准方式对其进行索引.
这是非常重要的.全文索引更新是异步的.例如,如果您对表执行INSERT,然后执行带有全文搜索的SELECT,而您希望新数据出现,则可能无法立即获得数据.根据您的配置,您可能需要等待几秒钟或一天.通常,当您的系统没有很多请求时,将填充全文索引.