【问题标题】:Why I would bother using full text search?为什么我会费心使用全文搜索?
【发布时间】:2012-05-17 04:30:55
【问题描述】:

我是全文搜索的新手,我使用了以下查询

Select * From Students Where FullName LIKE '%abc%'

Students 表包含数百万条随机记录,如下所示 'QZAQHIEK VABCNLRM KFFZJYUU'

只用了 2 秒就产生了 1100 行。 如果在两秒钟内搜索到百万条记录,我为什么还要费心使用全文搜索?!! Like 谓词是否也使用了全文索引?

【问题讨论】:

    标签: sql sql-server full-text-search


    【解决方案1】:

    没有。 LIKE 不使用全文索引。 See here.

    现在的计算机速度非常快,但如果您看到搜索结果的速度比您预期的要快,那么您可能只是返回了一个缓存的结果集,因为您之前执行了相同的查询。为确保您没有获得缓存结果,您可以使用 DBCC DROPCLEANBUFFERS。查看this post 了解一些 SQL Server 缓存清除选项。

    摘自链接页面:

    将 LIKE 与全文搜索进行比较

    与全文搜索相比,LIKE Transact-SQL 谓词仅适用于字符模式。此外,您不能使用 LIKE 谓词来查询格式化的二进制数据。此外,针对大量非结构化文本数据的 LIKE 查询比针对相同数据的等效全文查询要慢得多。对数百万行文本数据的 LIKE 查询可能需要几分钟才能返回;而针对相同数据的全文查询可能只需要几秒钟或更短的时间,具体取决于返回的行数。

    【讨论】:

    • 如果你只是得到一个缓存的结果,这并不是真正的搜索。此外,如果机器有足够的 RAM 并且几乎没有其他任何东西按下服务器,那么构成表格的许多页面可能已经加载到内存中,并且几乎整个搜索都发生在内存中(很少或不需要从磁盘。)这意味着您将获得非常快速的结果。
    【解决方案2】:

    我认为您已经回答了自己的问题,至少让您自己满意。如果您的原型设计在可接受的时间内产生结果,并且您确定缓存不能解释快速响应(根据 Paul Sasik),请务必跳过全文索引的开销并继续使用 LIKE。

    【讨论】:

    • +1 除了在选择此选项之前应该绝对消除缓存的作用。这样做的唯一方法是重新启动 SQL Server(从系统中清除所有内容),然后在服务器重新启动时运行查询。这样您就可以很好地了解该搜索在负载下的性能。
    • 实际上,您可以尝试通过这篇文章中的一些 T-SQL 清除缓存:stackoverflow.com/questions/1873025
    • 我清除了缓存,花了5秒,这是不可接受的。
    • 清除缓存会将性能降低到无法接受的水平,这并不让我感到惊讶。
    【解决方案3】:
    【解决方案4】:

    不,事实上,您的示例查询甚至不能利用常规索引来加快速度,因为它不知道任何潜在匹配的第一个字母。

    一般来说,全文搜索比常规查找要快。但 LIKE 的速度要慢得多。

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多