全文索引需要删除和重新创建 - 为什么?

Amj*_*shi 7 sql sql-server-2005 .net-3.5

所以我有一个运行在.net 3.5上的Web应用程序连接到SQL 2005框.

我们每两周进行一次预定发布.

250个中约有14个表是全文索引的.

不是每次发布,而是一些太多,索引废话.他们似乎有数据,但当我们尝试从前端或SQL企业搜索它们时,我们会得到超时/挂起.

我们有一个脚本可以禁用索引,删除它们,删除目录然后重新创建索引.这解决了问题99次中的100次.另一次,我们再次运行脚本,一切正常

我们尝试过重建全文索引,但这并没有解决问题.

我的问题是为什么我们必须这样做?我们可以做些什么来排序索引?

这是一些脚本,

IF  EXISTS (SELECT * FROM sys.fulltext_indexes fti WHERE fti.object_id = OBJECT_ID(N'[dbo].[Address]'))
ALTER FULLTEXT INDEX ON [dbo].[Address] DISABLE
GO
IF  EXISTS (SELECT * FROM sys.fulltext_indexes fti WHERE fti.object_id = OBJECT_ID(N'[dbo].[Address]'))
DROP FULLTEXT INDEX ON [dbo].[Address]

GO



IF  EXISTS (SELECT * FROM sysfulltextcatalogs ftc WHERE ftc.name = N'DbName.FullTextCatalog')
DROP FULLTEXT CATALOG [DbName.FullTextCatalog]
GO




        -- may need this line if we get an error
        BACKUP LOG SMS2 WITH TRUNCATE_ONLY

        CREATE FULLTEXT CATALOG [DbName.FullTextCatalog] ON FILEGROUP [FullTextCatalogs]
        IN PATH N'F:\Data'
        AS DEFAULT
        AUTHORIZATION [dbo]



CREATE FULLTEXT INDEX ON [Address](CommonPlace  LANGUAGE 'ENGLISH')
     KEY INDEX PK_Address
          ON [DbName.FullTextCatalog]
     WITH 
          CHANGE_TRACKING AUTO 
go
Run Code Online (Sandbox Code Playgroud)

rad*_*hop 2

这篇有关 SQL Server 2005 中全文索引失败的 MSDN 文章列出了 6 个可能的原因。我在这里总结 - 有关详细信息,请参阅全文。

  • 索引器无法找到或加载过滤器或断字组件。
  • 某个组件(例如分词器或过滤器)失败并向索引器返回错误。
  • 全文索引超出了全文目录中可包含的行数限制。
  • 正在索引的表上的聚集索引或全文键索引被更改、删除或重建。
  • 硬件故障或磁盘损坏会导致全文目录损坏。
  • 包含正在进行全文索引的表的文件组脱机或变为只读。

文章的结论是:

您应该在任何重要的全文索引填充操作结束时或发现填充未完成时查看爬网日志。