【问题标题】:SQL 2008 fulltext index population delaySQL 2008 全文索引填充延迟
【发布时间】:2012-06-10 06:42:54
【问题描述】:

我的经理说,在基础表数据更改后,全文搜索索引可能需要一段时间才能更新。

例如,如果我有一个表 Products 和一个列 Description,并且我更新了该描述,那么我可能需要一些时间才能搜索该新描述。真的吗?这需要多长时间?这在 SQL 2008 中有所改进吗?

如果用户修改了描述,我们要求后续搜索应该搜索修改后的数据,而不是更改之前的陈旧数据。

实现此目的的正确/推荐代码模式是什么?我们是否应该等待索引表明它已经完成?如果是这样,关于索引更新何时完成的保证是什么,例如在繁忙的系统中是否会延迟几分钟(推迟到某个队列,而不是优先于到达数据库的其他命令进行处理)。

【问题讨论】:

  • Full-Text Index Population 描述了针对 FT 指数可能出现的总体类型。它们都不支持立即更新,也没有给出时间限制。
  • 你有任何实时经验,一般来说有多快?是几秒钟,还是几分钟或几小时后,我才能搜索新产品?
  • 我已经看到它通常需要几秒钟,但这取决于您的 IO 子系统、有多少表、列以及正在处理的数据的大小,我想,所以可能只有在典型/最坏情况下的负载条件下对您自己的系统负责。

标签: sql sql-server sql-server-2008 full-text-search


【解决方案1】:

每次插入任何值时,在任何表上创建的全文索引都会更新,如果表未更新,则全文索引不会重建

【讨论】:

    【解决方案2】:

    如果您进行大量插入或更新,它们可能会导致 FTI 更新出现长时间延迟。 这是一些延迟代码直到 FTI 目录状态空闲的代码:

    DECLARE @CatalogName VARCHAR(MAX)
    SET  @CatalogName = 'Your FTI catalog name'
    DECLARE @status int
    SET @status = 1 --non-idle FTI see below
    WHILE @status > 0 --HERE WE LOOP UNTIL FTI STATUS IS IDLE
    begin
        SELECT
        @status = FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateStatus')
        FROM sys.fulltext_catalogs AS cat
        BEGIN
            waitfor  delay '00:00:05';
            PRINT @status
       END
    

    结束

    有关参考,另请参阅此线程:How can I know when SQL Full Text Index Population is finished?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多