Amazon qldb SELECT 查询以非常少的 READIo 搜索特定行
Amazon qldb SELECT query to search specific rows with very less READIo's
我有一个 table 包含以下列
用户ID(索引),
SID(索引),
原因(指数),
时间值(指数),
金额
我想查询特定用户 ID 的原因,意思是我想要一些 cause
等于 water
但我只想要一个 ID 为 [= 的用户28=]
我现在的查询正在进行全面 table 扫描
SELECT Cause, Cause_Amount, UserID FROM Contribution WHERE UserID = 'u5JvslEo9DbQ7hcq4vkM74dWlxr2' AND TimeValue > 1620414948000 AND ( Cause = 'cleanAir' OR Cause = 'safeWater')
所以方法应该是它应该以给定的 id 为目标 userId,然后检查 TimeValue,然后检查原因和 return 结果。
我希望这是有道理的
一般来说,您应该在您的最高基数文档上放置一个索引 属性。这意味着在您的数据中最独特的 属性 建立索引。因此,如果您的系统中有 10 个用户,但 Contribution
table 中有 1,000,000 个文档,则需要扫描 100,000 个文档。
如果您看到高阅读-IOs,这就像是因为您的用户数量少但贡献数量多。 Cause
似乎不太可能是高基数,而且 QLDB 还不 (9/8/2021) 支持范围查询,因此 TimeValue
上的范围查询可能也无济于事。
您的文档中是否还有其他属性可供您创建具有更高基数的索引?
我有一个 table 包含以下列
用户ID(索引), SID(索引), 原因(指数), 时间值(指数), 金额
我想查询特定用户 ID 的原因,意思是我想要一些 cause
等于 water
但我只想要一个 ID 为 [= 的用户28=]
我现在的查询正在进行全面 table 扫描
SELECT Cause, Cause_Amount, UserID FROM Contribution WHERE UserID = 'u5JvslEo9DbQ7hcq4vkM74dWlxr2' AND TimeValue > 1620414948000 AND ( Cause = 'cleanAir' OR Cause = 'safeWater')
所以方法应该是它应该以给定的 id 为目标 userId,然后检查 TimeValue,然后检查原因和 return 结果。
我希望这是有道理的
一般来说,您应该在您的最高基数文档上放置一个索引 属性。这意味着在您的数据中最独特的 属性 建立索引。因此,如果您的系统中有 10 个用户,但 Contribution
table 中有 1,000,000 个文档,则需要扫描 100,000 个文档。
如果您看到高阅读-IOs,这就像是因为您的用户数量少但贡献数量多。 Cause
似乎不太可能是高基数,而且 QLDB 还不 (9/8/2021) 支持范围查询,因此 TimeValue
上的范围查询可能也无济于事。
您的文档中是否还有其他属性可供您创建具有更高基数的索引?