【问题标题】:Full Text Search "Contains" is slower than "Like %"全文搜索“包含”比“喜欢 %”慢
【发布时间】:2011-05-03 21:44:06
【问题描述】:

我在 SQL Server 2008 x64 上遇到全文索引问题。

我有三张桌子:

90 000 行的 TableA

具有 12 000 000 行的 TableB

具有 22 000 000 行的 TableC

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

当我查询 TableA 时:

Select * from TableA where Contains(field1, '"j*"')

我在不到 1 秒的时间内看到了 11000 条记录

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

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

会因为B和C大表而存在问题吗?表A查询成功。

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

一些细节:

对于表 B 和 C,我总是看到“人口状态 = 处理通知”(9)

属性“TableFulltextDocsProcessed”总是增加

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

【问题讨论】:

  • “但是他们已经索引(填充)3天了”
  • “但他们已经索引(填充)3天了”

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


【解决方案1】:

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

Select * from TableA where Contains(field1, '"j*"')

如果您使用

进行相同的搜索,则其中只有字符“j
Select field1 from TableA where Contains(field1, 'fish')

相比

Select field1 from TableA where field1 like '%fish%'

在这句话中,他们谈论了很多关于文字而不是字符的内容。 SQL Server 2005 Full-Text Search: Internals and Enhancements

全文搜索允许快速且 基于关键字的灵活索引 查询存储在 SQL 中的文本数据 服务器数据库。不像 LIKE 谓词,仅适用于 字符模式,全文查询 执行语言搜索 这些数据,对文字和 基于特定规则的短语 语言。

所以我想知道如果短语:'j' 必须是全文使用的语言中的单词,j* 是否有效。 看 CONTAINS (Transact-SQL)

指定单词或短语的匹配 以指定的文本开头。 用双精度词括起来 引号 ("") 并添加一个 结尾前的星号 () 引号,以便所有文本 从简单的术语开始 在星号之前指定 匹配。该条款应该是 以这种方式指定:包含(列, '"文本"')。星号匹配零, 一个或多个字符(根 词或词组中的一个或多个词)

执行计划是什么样的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多