gpt4 book ai didi

sql-server - 具有全文搜索功能的多站点 CMS 和 SQL Server 查询优化器

转载 作者:行者123 更新时间:2023-12-04 05:47:05 27 4
gpt4 key购买 nike

我们有 table SiteContent在我们的数据库中。

每个站点由不同的客户运营,每个站点都有自己的内容。

在站点的前端,我们提供了一个搜索框,它使用内容表上的全文/自由文本搜索来返回结果,但每个站点只能从其自身返回结果,而不能从数据库中的其他站点返回结果。

SQL Server 查询优化器在这里表现不佳。如果它优化了对内容很少的站点的查询,那么对于具有大量内容的站点,该查询的执行会很糟糕,从而导致超时。

我们知道我们可以添加OPTION(RECOMPILE)到查询结束以解决此问题,但我的问题是...

为每个站点创建一个缓存表以便每个站点的内容可以定期缓存并让搜索存储过程查找缓存表而不是使用参数会更好吗?

缓存只会在添加/更改内容时更新/刷新。

我的想法是,这将......

a) 减少正在搜索的表的大小,使其只包含正确站点的记录

b) 允许全文搜索为每个站点生成更准确的内容索引

c) 允许查询优化器独立缓存每个站点的优化查询

这样对吗?我这样做对吗?

最佳答案

你在问正确的问题。这是一种权衡。您必须决定哪种情况对您的情况更好/或更糟。

您会经常添加网站吗?您预计每个站点总共有多少行?一般而言,SQL Server 2008 全文搜索最多可以处理数百万行中的数十行。如果您期望更多,我会将站点拆分为单独的表。

请记住,即使您拆分为多个表,由于从给定搜索词返回的数量或单词,您的查询计划仍可能会有很大差异。您可能仍要考虑使用 OPTION(RECOMPILE)。

以下是每条路线的一些优点:

单 table

  • 无需更改架构即可添加其他站点。
  • 更容易管理。
  • 无需担心单独的存储过程或动态 SQL 来处理多个表。

  • 多表
  • 较小的表和索引(不需要 SiteId)。
  • 由于目录较小,全文性能更好。
  • 可能更好地分离数据。
  • 关于sql-server - 具有全文搜索功能的多站点 CMS 和 SQL Server 查询优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10547267/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com