我来自RDMS背景,最近我开始使用DynamoDB。
我跟随DyamoDB表有三个全球二级索引(GSI)
ID(主键),user_id( GSI ),event_type( GSI ),product_id( GSI ) ,rate,create_date
我有以下三种查询模式:
我知道在MySQL中我需要创建以下索引来优化上述查询:
我的问题是,如果我为DyanomoDB中的'event_type','product_id'和'user_id'字段创建三个GSI,那么查询模式“b”和“d”是否会使用这三个独立的GSI?
答案 0 :(得分:1)
首先,与RDBMS不同,Dynamodb不会根据过滤器表达式中使用的字段选择GSI(我的意思是没有SQL优化器可以根据SQL中使用的字段选择合适的索引)。 / p>
您必须直接查询GSI才能获取数据。您可以参考GSI查询页面以了解更多信息。
您可以创建两个GSI: -
1)事件类型
2)产品ID
您确保在GSI中包含其他必填字段,尤其是产品ID,用户ID和任何其他必填字段。这样,当您查询GSI时,您将获得完成用例所需的所有字段。只要您有一个来自GSI的字段,就可以在Filter表达式中包含其他字段来过滤数据。这可以确保您不会创建不必要的GSI,这需要额外的空间和成本。