全文搜索“包含”比“喜欢%”慢

Ant*_*yok 5 sql-server full-text-search contains sql-like

我在SQL Server 2008 x64上的全文本索引有问题。

我有三个表:

具有9万行的TableA

具有12000000行的TableB

具有22000000行的TableC

我创建了具有自动填充功能的FTS目录。

当我查询TableA时:

Select * from TableA where Contains(field1, '"j*"')
Run Code Online (Sandbox Code Playgroud)

我看到11000条记录少于1秒

但是,当我使用相同的查询查询TableB或TableC时,我在2秒内看到250条记录。这显然很慢。

对于相同的表,用“ like%”而不是“ contains”执行的查询少于1秒。

由于表B和C较大,是否存在问题?TableA查询成功。

也许这些表需要更多时间来建立索引?(但他们已经索引(填充)了3天)

一些细节:

对于表B和CI,请始终参阅“人口状况=正在处理通知”(9)

属性“ TableFulltextDocsProcessed”总是增加

(我的SQL Server有一个镜像实例。)

Pat*_*röm 1

我不知道你的 contains 查询是否真的使用全文索引。我认为它必须进行全表扫描。据我了解,不同语言的全文索引索引词和词干。您喜欢的查询

Select * from TableA where Contains(field1, '"j*"')
Run Code Online (Sandbox Code Playgroud)

如果您使用 进行相同的搜索,则其中只有字符“ j ”

Select field1 from TableA where Contains(field1, 'fish')
Run Code Online (Sandbox Code Playgroud)

相比

Select field1 from TableA where field1 like '%fish%'
Run Code Online (Sandbox Code Playgroud)

在这句话中,他们谈论了很多单词而不是字符。 SQL Server 2005 全文搜索:内部结构和增强功能

全文搜索允许对 SQL Server 数据库中存储的文本数据进行基于关键字的查询快速而灵活的索引。与仅适用于字符模式的 LIKE 谓词不同,全文查询针对此数据执行语言搜索,根据特定语言的规则对单词和短语进行操作。

所以我想知道如果短语“j”必须是全文使用的语言中的单词,则 j* 是否有效。请参阅 CONTAINS (Transact-SQL)

指定以指定文本开头的单词或短语的匹配。将前缀术语括在双引号 ("") 中,并在结束引号前添加星号 ( ),以便匹配以星号之前指定的简单术语开头的所有文本。该子句应该这样指定:CONTAINS (column, '"text "')。星号匹配零个、一个或多个字符(词根单词或单词或短语中的单词)

执行计划是什么样的?