6

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

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

学生表包含数百万条随机记录,看起来像这样 'QZAQHIEK VABCNLRM KFFZJYUU'

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

4

4 回答 4

4

不,LIKE 不使用全文索引。看这里。

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

链接页面的摘录:

将 LIKE 与全文搜索进行比较

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

于 2012-05-08T16:55:33.687 回答
1

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

于 2012-05-08T17:05:04.017 回答
0

如果您关心对结果集或词干进行排序,您可能对全文搜索感兴趣。

于 2012-05-08T16:59:33.827 回答
0

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

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

于 2012-05-08T17:02:03.357 回答