索引设计 |多个索引与具有多个数据源的 1 个索引的性能

Index Design | Performance of Multiple Indexes VS 1 Index with multiple Data Sources

实施 Azure 搜索。我们目前有两个彼此相关的 tables(关系数据库),我们想将其用作索引。

实现这个的最佳方法是什么?

  1. 命中两个索引(每个索引一个 table),在 结果代码。
  2. 两个数据源(每个 table),两个索引器指向同一个索引。
  3. 使用 SQL 视图,在其中进行连接。

我使用第一个选项作为示例,但我得到的结果在 200 到 400 毫秒之间 只有 3 条记录 -使用 Postman。业务限制将在 20 个结果左右。我对此的担心是当我开始添加更多索引然后在代码中进行它们之间的连接时可能无法执行。

例如主要的 table,有 4 或 5 个 table 与之相关(PK - FK 关系),我必须为它们中的每一个创建一个索引。那样行吗?这会导致性能问题吗?我应该尝试第二个还是第三个选项?

请您扩展您的答案。 谢谢

我建议你看看 Azure 搜索的新复杂类型功能。对于 1:N 关系,您可以将相关记录放在索引的 Collection(Edm.ComplexType) 字段中。有关复杂类型的更多信息:https://docs.microsoft.com/en-us/azure/search/search-howto-complex-data-types

就索引器而言,我建议您在 SQL 中创建一个视图,将当前行的相关记录提取到 JSON 格式的文本字段中。然后,您可以将数据 source/indexer 指向此视图,并将 JSON 字段中的字段映射到索引中的复杂集合字段中。

SQL 实际上使定义视图变得非常容易。例如,对于 Azure Search Hotels 示例架构,它将是:

SELECT *, (SELECT *
    FROM dbo.Rooms$
    WHERE dbo.Rooms$.HotelID = dbo.Hotels$.HotelID FOR JSON AUTO) AS Rooms
FROM dbo.Hotels$

希望对您有所帮助。

迈克·卡特
Azure 搜索产品团队