在我们的应用程序中,我们有一个查询,它在 API 端点上将具有“活动”的用户返回给指定的客户端或事件(一个或多个 - 由 ID 指定)。当活动表有 3000 万行时,这个查询大约需要 15 秒才能返回(注意“资产”表中还有约 60 万行和 2700 个“用户”)。
表格的粗略架构可以在我的问题的底部找到。下面是我们查找“活动超过阈值的用户”的查询。为简洁起见,我也在下面放置了视图定义。
当此端点返回一页数据时,还会运行第二个类似的查询以获取填充分页响应的元素总数 - 本质上,端点的性能是查询性能的 2 倍。
我的问题本质上是,我应该应用哪些技术来提高此查询的性能?我们试图坚持的“基准”是端点响应的“亚秒级”。
查询计划可以在这里找到。
SELECT DISTINCT t.type, t.sid, t.name, t.emailAddress, t.jobTitle
FROM sec.Trustee t
INNER JOIN (
SELECT data.sid, SUM(data.hoursBilled) as hoursBilled, SUM(data.docsAccessed) as docsAccessed, data.asset_type as asset_type, data.displayId as displayId, data.displayName as displayName
FROM (
SELECT billing.trustee_sid as sid, 0 as hoursBilled, billing.recordedValue as docsAccessed, a.type as asset_type, a.displayId, a.displayName
FROM sec._DocumentsBilling billing
INNER JOIN sec.SessionSid s
ON …Run Code Online (Sandbox Code Playgroud)