我是全文搜索的新手,我使用了以下查询
Select * From Students Where FullName LIKE '%abc%'
学生表包含所有随机的百万条记录,看起来像这样 'QZAQHIEK VABCNLRM KFFZJYUU'
只用了2秒就产生了1100行。 如果在两秒内搜索到百万条记录,为什么我会费心使用全文搜索?!! Like谓词是否也使用了全文索引?
答案 0 :(得分:4)
没有。 LIKE没有使用全文索引。 See here.
现在计算机的速度非常快,但是如果你看到的搜索结果比预期的要快,那么你可能只是因为你之前执行了相同的查询而返回了一个缓存的结果集。为了确保您没有获得缓存结果,您可以使用DBCC DROPCLEANBUFFERS。有关SQL Server缓存清除选项,请查看this post。
摘自链接页面:
将LIKE与全文搜索进行比较
与全文搜索相比,LIKE Transact-SQL谓词仅适用于字符模式。此外,您不能使用LIKE谓词来查询格式化的二进制数据。此外,针对大量非结构化文本数据的LIKE查询比针对相同数据的等效全文查询慢得多。对数百万行文本数据的LIKE查询可能需要几分钟才能返回;而对于相同的数据,全文查询只需几秒或更短时间,具体取决于返回的行数。
答案 1 :(得分:1)
我认为你已经回答了自己的问题,至少是为了你自己的满意。如果您的原型设计在可接受的时间内产生结果,并且您确定缓存不能解释快速响应(根据Paul Sasik),请务必跳过全文索引的开销并继续LIKE。
答案 2 :(得分:0)
答案 3 :(得分:0)
不,实际上你的示例查询甚至不能利用常规索引来加快速度,因为它不知道任何潜在匹配的第一个字母。
通常,全文搜索比常规查找更快。但LIKE相当慢。