2015-04-07 88 views
0

讓說,我有兩個查詢運行:App Engine數據存儲 - 索引優化

# Q1 
Chair.query(ndb.AND(Chair.type == 'A', Chair.invented_at < '2014')) 

# Q2 
Chair.query(ndb.AND(Chair.type == 'A', Chair.cost == 2, Chair.invented_at < '2014')) 

Q1和Q2有一個不等式過濾器,因此這些查詢需要複合索引。

由開發服務器自動生成的索引將包含兩個索引,每個查詢一個索引。

# Index for Q1 
- kind: Chair 
    properties: 
    - name: type 
    - name: invented_at 

# Index for Q2 
- kind: Chair 
    properties: 
    - name: type 
    - name: cost 
    - name: invented_at 

但不會是在存儲方面更加高效和寫入操作只使用第二個索引(Q2)和修改Q1(它可能在某些情況下是可能的),所以它使用Q2指數呢?或者數據存儲更容易使用更小但更多的索引?

這個問題是完全假設的,我只是想知道數據存儲將如何反應。

回答

0

數據存儲從不計算任何東西,它實際上只是讀取索引中顯示的順序。

第二季度指數中間存在成本意味着Q1無法使用它。就這麼簡單。它按類型排序,然後是成本,然後是invented_at。我知道系統可以讀取它所需的內容,但它不會跳過列。

zigzag merge join算法,可以幫助最大限度地減少索引的數量,如果你想,但不是在這種情況下。您也可以有更多的信息here