sql - 为什么我要费心使用全文搜索?

标签 sql sql-server full-text-search

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

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

学生表包含一百万条随机记录,如下所示 'QZAQHIEK VABCNLRM KFFZJYUU'

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

最佳答案

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

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

摘自链接页面:

LIKE 与全文搜索的比较

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

关于sql - 为什么我要费心使用全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502872/

相关文章:

python - pyodbc 执行变量变为@P1

postgresql - PostgreSQL 中的 Edge NGram 搜索

当搜索字符串中存在任何干扰词时,SQL 全文搜索不会返回结果

sql - 如何查找sql​​ server表的三个字段中出现次数最多的单词

c# - con.Open() 失败异常 具有 IsolationLevel 快照的事务无法提升

java - SHA-256 自定义长度摘要

java - Lucene 通过 URL 搜索

php - mysql获取一个值的重复项

mysql - 获取错误 SQL Server 子查询返回超过 1 个值。当子查询跟在=、!=、<、<=、>、>=之后时,这是不允许的

sql - Oracle SQL 中的有向图使用递归查询仅访问每个节点一次