You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除全文搜索(FTS)内部分区?附查询结果说明

删除SQL Server全文搜索(FTS)内部分区的方法

你查到的ifts_comp_fragment_xxx是全文索引在维护、同步过程中产生的内部碎片分区,这类系统生成的分区无法直接通过删除分区命令清理,需要通过重建全文索引的方式来彻底清理这些碎片。

步骤1:确认碎片关联的全文索引信息

先执行以下查询,明确这些碎片对应的表、全文索引和目录,确保操作对象准确:

SELECT 
    so.name AS fragment_name,
    fi.name AS fulltext_index_name,
    t.name AS table_name,
    SCHEMA_NAME(t.schema_id) AS table_schema,
    fc.name AS fulltext_catalog_name
FROM sys.partitions p
INNER JOIN sys.sysobjects so ON p.object_id = so.id
INNER JOIN sys.fulltext_indexes fi ON so.parent_obj = fi.object_id
INNER JOIN sys.tables t ON fi.object_id = t.object_id
INNER JOIN sys.fulltext_catalogs fc ON fi.fulltext_catalog_id = fc.fulltext_catalog_id
WHERE so.name LIKE 'ifts_comp_fragment_%' AND p.partition_number > 1;

步骤2:批量重建关联的全文索引

通过动态SQL批量处理所有涉及的表,先停用再重建全文索引,自动清理内部碎片:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
-- 处理表 ' + SCHEMA_NAME(t.schema_id) + N'.' + t.name + N'
ALTER FULLTEXT INDEX ON [' + SCHEMA_NAME(t.schema_id) + N'].[' + t.name + N'] DISABLE;
ALTER FULLTEXT INDEX ON [' + SCHEMA_NAME(t.schema_id) + N'].[' + t.name + N'] REBUILD;
'
FROM sys.partitions p
INNER JOIN sys.sysobjects so ON p.object_id = so.id
INNER JOIN sys.fulltext_indexes fi ON so.parent_obj = fi.object_id
INNER JOIN sys.tables t ON fi.object_id = t.object_id
WHERE so.name LIKE 'ifts_comp_fragment_%' AND p.partition_number > 1
GROUP BY SCHEMA_NAME(t.schema_id), t.name; -- 避免重复处理同一个表

EXEC sp_executesql @sql;

步骤3:验证清理效果

重新运行你最初的查询,确认多余的分区已被清理:

SELECT so.name, p.* 
FROM sys.partitions p 
INNER JOIN sys.sysobjects so ON p.object_id = so.id 
WHERE partition_number > 1 
OPTION (RECOMPILE);

注意事项

  • 重建全文索引会占用一定系统资源,建议在业务低峰期执行
  • 若全文目录数据量较大,重建耗时会较长,需提前评估对业务的影响
  • 禁止直接删除ifts_comp_fragment_xxx这类系统对象,会导致全文索引损坏甚至失效

内容的提问来源于stack exchange,提问作者ZedZip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:31:06