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

时间:2019-05-16 11:27:22

标签: c# saas azure-search

实施Azure搜索。当前,我们有两个相互关联的表(关系数据库),我们希望将它们用作索引。

实现此目标的最佳方法是什么?

  1. 命中两个索引(每个表一个), 产生代码。
  2. 两个数据源(每个表一个),两个索引器指向相同的索引。
  3. 使用SQL视图,在其中进行联接。

我使用第一个选项作为示例,但是对于3条记录-使用邮递员,我在 200到400毫秒之间得到结果。业务上限大约为20个结果。我担心的是,当我开始添加更多索引,然后在代码中执行它们之间的联接时可能无法执行。

例如,假设主表具有4或5个与之相关的表(PK-FK关系),我将不得不为每个表创建一个索引。那样行吗?这会导致性能问题吗?我应该尝试第二种还是第三种选择?

能否请您扩大答案。 谢谢

1 个答案:

答案 0 :(得分:0)

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

就索引器而言,我建议您在SQL中创建一个视图,该视图将当前行的相关记录提取到JSON格式的文本字段中。然后,您将数据源/索引器指向此视图,并将字段从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搜索产品团队