2016-12-01 54 views
0

我來自RDMS背景,最近我開始使用DynamoDB。DynamoDB:查詢中的全局二級索引利用率

我有三個全球輔助索引(GSI)

ID(主鍵),USER_ID(GSI),EVENT_TYPE(GSI),PRODUCT_ID以下DyamoDB表(GSI ) ,rate,create_date

我有以下三種查詢模式:

  • a)WHERE event_type =?
  • b)WHERE event_type =? AND product_id =?
  • c)WHERE product_id =?
  • d)WHERE product_id =? AND user_id =?

我知道在MySQL我需要創建以下索引來優化上面的查詢:

  • 綜合指數(EVENT_TYPE,PRODUCT_ID):用於查詢的 「a」 和 「b」
  • 綜合指數( PRODUCT_ID,USER_ID):用於查詢 「c」 和 「d」

我的問題是,如果我創建三個GSIS爲 'EVENT_TYPE', 'PRODUCT_ID' 和DyanomoDB 'USER_ID' 字段中,執行查詢模式「 b「和」d「利用這三個獨立的G SIs?

+0

基於indexedDB的DynamoDB? indexedDB是一個由瀏覽器支持並可通過Javascript訪問的嵌入式數據庫。如果您的問題與此無關,請刪除標籤。 – Josh

回答

1

首先,與RDBMS不同,Dynamodb沒有根據過濾器表達式中使用的字段(我的意思是沒有SQL優化器根據SQL中使用的字段選擇合適的索引)來選擇GSI。

您必須直接查詢GSI以獲取數據。你可以參考GSI查詢頁面來了解更多。

您可以創建兩個GSIS: -

1)事件類型

2)產品編號

您確保包括在GSI尤其是產品ID,用戶ID的其他必填字段和任何其他必填字段。通過這種方式,當您查詢GSI時,您將獲得完成用例所需的所有字段。只要您有來自GSI的一個字段,您可以在Filter表達式中包含其他字段來過濾數據。這確保您不會創建需要額外空間和成本的不必要的GSI。

相關問題