1

我有一个包含以下列的表格

UserID(索引)、SID(索引)、Cause(索引)、TimeValue(索引)、Amount

我想查询特定用户 id 的原因,这意味着我想要一些cause等于假设water但我只希望一个 id 为“someId”的用户

我现在的查询正在执行全表扫描

SELECT Cause, Cause_Amount, UserID FROM Contribution WHERE UserID = 'u5JvslEo9DbQ7hcq4vkM74dWlxr2' AND TimeValue > 1620414948000 AND ( Cause = 'cleanAir' OR Cause = 'safeWater')

所以方法应该是它应该以给定的 id 为目标 userId 然后检查 TimeValue 然后是原因并返回结果。

我希望这是有道理的

4

1 回答 1

1

一般来说,您应该在您的最高基数文档属性上放置一个索引。这意味着对数据中最独特的属性进行索引。因此,如果您的系统中有 10 个用户,但Contribution表中有 1,000,000 个文档,则需要扫描 100,000 个文档。

如果您看到高读取 IO,这就像您拥有少量用户但大量贡献。高基数似乎不太可能,Cause并且 QLDB 尚不 (9/8/2021) 支持范围查询,因此范围查询TimeValue可能也无济于事。

您的文档上是否还有其他属性可以创建具有更高基数的索引?

于 2021-09-08T18:05:56.427 回答