[英]Why is sorting in arangodb slow?
我正在嘗試查看arangodb是否適合我們的用例。 我們將收集具有相同模式(如sql表)的大量文檔。
為了嘗試一些查詢,我插入了大約9萬個文檔,這很低,因為我們希望文檔數量在100萬以上。
現在,我想獲得這些文檔的簡單頁面,不進行過濾,而是進行降序排序。
所以我的aql是:
for a in test_collection
sort a.ARTICLE_INTERNALNR desc
limit 0,10
return {'nr': a.ARTICLE_INTERNALNR}
當我在AQL編輯器中運行此程序時,大約需要7秒鍾,而我期望的時間可能是幾毫秒或類似的時間。
我嘗試在其上創建哈希索引和跳過列表索引,但這沒有任何效果:
db.test_collection.getIndexes()
[
{
"id" : "test_collection/0",
"type" : "primary",
"unique" : true,
"fields" : [
"_id"
]
},
{
"id" : "test_collection/19812564965",
"type" : "hash",
"unique" : true,
"fields" : [
"ARTICLE_INTERNALNR"
]
},
{
"id" : "test_collection/19826720741",
"type" : "skiplist",
"unique" : false,
"fields" : [
"ARTICLE_INTERNALNR"
]
}
]
那么,我是否缺少某些東西,還是ArangoDB不適合這些情況?
如果ArangoDB需要對所有文檔進行排序,這將是一個相對較慢的操作(與不排序相比)。 因此,目標是完全避免排序。 ArangoDB有一個跳過列表索引,該索引將索引值保持在已排序的順序,並且如果可以在查詢中使用它,則將加快查詢速度。
目前有一些陷阱:
這兩個問題似乎都影響了您。 我們希望盡快解決這兩個問題。
目前,有一種變通方法可以強制使用AQL查詢以向前順序使用索引,如下所示:
FOR a IN
SKIPLIST(test_collection, { ARTICLE_INTERNALNR: [ [ '>', 0 ] ] }, 0, 10)
RETURN { nr: a.ARTICLE_INTERNALNR }
上面的代碼通過條件為“值> 0”的ARTICLE_INTERNALNR上的索引選取了前10個文檔。 我不確定是否有解決方案以限制向后排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.