我有一个SQL数据库,其中的表包含一些BLOB文件。包含文件内容的列是全文索引,因此在发生任何更改时都会进行跟踪。检测到更改后,SQL Server将更新基础全文索引,其中包含有关已保存文件的信息。
此解决方案的问题是,全文索引需要将文件内容永久保存在索引表中,以便允许对索引文件进行查询。在这种情况下,数据库的增长是不必要的,这仅仅是因为底层的全文索引会随着相应表上发生的每一次更改而更新,从而最终阻止用户删除已保存的文件内容。
在使用全文本索引时,我发现可以对索引表禁用更改跟踪,这使SQL Server可以忽略(或错过)所做的更改。
在禁用更改跟踪之后,由于我的索引是手动的并且索引保持不变,因此我可以通过删除相应的文件内容并仍然在FileContent列上查询搜索词来更新表。
但是,在执行ALTER FULLTEXT INDEX ON [Table] SET CHANGE_TRACKING MANUAL
之后,将自动运行全部索引,并且查询表不再返回与搜索结果相同的文件。
我的计划是执行ALTER FULLTEXT INDEX ON [Table] START UPDATE POPULATION
,它仅查看跟踪的更改(根据documentation),以确定应如何更新全文索引。由于全部填充都创建了一个新索引,随后删除了对先前保存的文件的所有引用,因此失败了。
有没有办法防止SET CHANGE_TRACKING MANUAL
挤满人口?