2015-10-13 36 views
1

我們得到了多個奇怪的場景。我們使用ORDER BY ASC獲取數據,但不是通過DESC刪除

例如:

一)我們無法通過_TS訂購:空結果

SELECT * FROM data ORDER BY data._ts DESC 

b)我們可以ORDER BY ASC和我們得到的成績(超過> 100以上)。但是,如果我們ORDER BY DESC我們得到零個結果,已經沒有意義對我們來說:(,

假設c是一個整數,這是我們所看到的行爲:

SELECT * FROM data ORDER BY data.c ASC = RESULTS 
SELECT * FROM data ORDER BY data.c DESC = zero results 

c)我們有一個UDF要做的包含了一個可信的,但並不適用於所有的情況,JS函數的外部測試和IT工作,我們不明白 SELECT * FROM data r where udf.TEST(rc,「AS」)= RESULTS SELECT * FROM數據r其中udf.TEST(rc,「健康」)=零結果(但由其他字段我可以找到該值)

ks很多!

+0

請通過http://stackoverflow.com/help/how-to-ask。它應該可以幫助你更好地解決你的問題。更好的框架問題通常會吸引更多的答案。 –

+0

現在回答你的問題:當你收回結果時,你是否檢查延續標記?您正在查詢的集合是否啓用了索引功能? –

+0

請爲UDF問題創建一個單獨的問題。 –

回答

3

jamesjara我離線同步...張貼在這裏我們討論了其他人的利益:)

1)查詢響應限制和延續令牌

有多久查詢範圍將在DocumentDB上執行。這些限制包括查詢的資源消耗(您可以將這一點與配置的RU/sec * 5秒的數量+未公開的緩衝區進行比較),響應大小(1mb)和超時(5秒)。

如果碰到這些限制,那麼可能會返回部分結果集。查詢執行所完成的工作通過將狀態以連續令牌的形式傳回(HTTP響應頭中的x-ms-continuation)來保留。您可以通過在後續查詢中傳遞延續標記來繼續執行查詢。客戶端SDK通過toList()toArray()(取決於SDK風格)自動分頁結果,使交互更加容易。

可以在結果中獲得一個空白頁面。在查詢引擎找到第一個結果(例如,掃描通過集合查找大數據集中的少數文檔)之前達到資源消耗限制時,可能會發生這種情況。

2)ORDER BY和索引策略

爲了您的查詢中使用ORDER BY或範圍比較(<>,等等),你應該指定一個包含一系列指數與最大的索引策略精度(精度= -1)超過用於排序的JSON屬性。這允許查詢引擎利用索引。

否則,您可以通過指定x-ms-documentdb-query-enable-scan HTTP請求標頭w /值設置爲true來強制執行掃描。在客戶端SDK中,這通過0​​對象公開。

建議的索引策略ORDER BY

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
    { 
     "path": "/*", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     }, 
     { 
      "kind": "Range", 
      "dataType": "String", 
      "precision": -1 
     } 
     ] 
    }, 
    { 
     "path": "/_ts/?", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     } 
     ] 
    } 
    ], 
    "excludedPaths": [] 
} 

3)UDF和索引

UDF是不能夠採取索引的優勢,將導致掃描。因此,建議您在查詢WHERE子句中包含其他過濾器,以減少要掃描的文檔數量。