维护大表的全文索引

mg1*_*075 5 sql-server-2008 best-practices full-text-search

我使用的是 SQL Server 2008,有一个用于报告目的的表,其中包含 500,000 条记录,这些记录很容易达到数百万条。该表将采用全文索引来快速搜索少数列。

由于这是报告表而不是源事务表,因此有时会添加新记录,而有时由于源表中发生的更改而必须删除现有记录。

我的问题是关于构建(正在进行的)报告表并维护该表的全文索引的最佳方法。

添加全文索引后,我应该:

  1. 保留索引,并根据需要删除/添加记录
  2. 保留索引,截断报告表,然后插入所有适当的记录
  3. 其他?

到目前为止,我在研究时已经看到了这些文章,但这种情况的最佳实践并不明显。

  1. https://learn.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search?redirectedfrom=MSDN&view=sql-server-ver15
  2. https://techcommunity.microsoft.com/t5/datacat/best-practices-for-integrated-full-text-search-ifts-in-sql-2008/ba-p/305000
  3. https://social.msdn.microsoft.com/Forums/en-US/c743f6e4-88c6-478b-954b-ba8207e391c5/sql-2005-full-text-index-rebuild-nightly-best-approach?forum=sqldatabaseengine

Str*_*DBA 3

SQL Server 中的全文应该可以轻松满足您的工作负载。我目前在 SQL Sever 中支持大约 500,000 行的全文索引,每天插入和删除 125,000 行。查询负载峰值约为 200 次全文搜索/秒。响应时间相当稳定在 0.5 至 1.5 秒范围内。

全文推荐

  • 使用自动更改跟踪。它就可以正常工作,您无需安排任何事情。

  • 为全文填充错误创建 SQL 代理警报。群体可能会失败(很少会失败)。当它们失败时,您必须手动恢复它们。让 sql 代理作业启动“ALTER FULLTEXT INDEX ON myTable RESUME POPULATION”使其成为非事件。

  • 如果您的查询负载和更新量都非常高,请考虑跟踪标志 7646。此标志适用于 2008/2008 R2(不适用于 2012)。它减少了对内部数据结构的一些阻塞,并记录在 SharePoint 最佳实践文档中。(你可能不需要这个)

  • 否则,您可能不需要进行任何额外的调整。它通常可以正常工作。

Sql 2012 在可扩展性和性能方面引入了重大改进,因此如果可以的话请升级。

至于如何管理插入和更新,只需更新通常添加的行即可。我不建议截断/重新加载,但否则不用担心。