目前,我有一個通過DSE圖形引擎存儲的具有100K節點的圖形。這些節點具有標籤「customer」和稱爲「age」的屬性,其允許整數值。我已經收錄這個屬性用下面的命令:整數間隔的DSE圖形索引
schema.vertexLabel("customer").index("custByAge").secondary().by("age").add()
我希望能夠用這個指數來回答這個問題尋找客戶(10和20之間例如「年齡」)在一定年齡範圍內的查詢。但是,當我按年齡間隔查詢客戶時,似乎並沒有實際使用我創建的索引。
當我提交以下查詢,返回在40ms左右的頂點列表,這使我相信,該指數正在使用:
g.V().has('customer','age',15)
但是,當我提交下列查詢,查詢超時30秒後(我在配置中已指定):
g.V().has('customer','age',inside(10,20))
Interruption of result iteration
Display stack trace? [yN]
這使我相信,沒有被用於此查詢索引。這看起來合適嗎?如果索引沒有被使用,有沒有人有一些建議,我可以如何加快這個查詢?
編輯 正如下面的回答表明,我已經在上述每個查詢的運行.profile文件,結果如下(只顯示相關信息):
gremlin> g.V().has('customer','age',21).profile()
==>Traversal Metrics
...
index-query 14.333ms
gremlin> g.V().has('customer','age',inside(21,23)).profile()
==>Traversal Metrics
...
index-query 115.055ms
index-query 132.144ms
index-query 132.842ms
>TOTAL 53042.171ms
這給我留下了一個幾個問題:
- 請問.profile()返回
index-query
是否意味着索引正在用於我的第二個查詢? - 爲什麼第二個查詢有3個索引查詢,而第一個查詢只有1個?
- 對於第二個查詢,所有的索引查詢總計約爲〜400ms。爲什麼整個查詢需要〜50000ms?除了這些索引查詢外,.profile()命令不會顯示任何其他內容,所以額外的50000ms來自哪裏?
整個.profile()輸出將對查看有用。此外,如果使用DataStax Studio,則可以通過將鼠標懸停在單個行上來檢查註釋詳細信息。 –
可能是3個索引查詢,因爲中間結果大小達到了50k個元素的限制..?你期望有多少元素?請注意,二級索引對於大型結果是一個不好的選擇,您應該嘗試使用搜索索引。 –