Cosmos DB中的索引

时间:2018-08-16 16:08:36

标签: azure nosql azure-cosmosdb

我有一个庞大的Cosmos DB Collection。它有大约500K记录,我的RU范围是1000RU / s。我为自定义列创建了一个列索引。以下是Index JSON模式。

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

下面是我的收藏结构。

{
    "Column1": "Data1",
    "Column2": "Data2",
    "Column3": "Data3",
    "Column4": "Data4"
}

当我触发以下选择查询(“ SELECT * FROM r where INDEX_OF(r.Column2,'Data2')>-1”)时,它将返回正确的值。但是它批量执行,而不是从Indexes获取值。例如,查询应仅返回一条记录。但是它返回带有延续令牌的空白。我希望索引应该从现有索引中返回记录。我有什么想念的吗?

2 个答案:

答案 0 :(得分:1)

此查询将不使用索引,因为无法从索引提供INDEX_OF。 CONTAINS系统功能(相当于INDEX_OF()> -1)也是如此。对于字符串系统函数,只有那些函数才能使用索引:

  • STARTSWITH(str_expr,str_expr)
  • LEFT(str_expr,num_expr)= str_expr
  • SUBSTRING(str_expr,num_expr,num_expr)= str_expr,但前提是第一个num_expr为0

答案 1 :(得分:-2)

了解RU限制,您有1000 RU的平均值,在一秒钟之内不能读取超过1000个文档(文档大小为1kb)

您可能有两种解决方案:

  1. 您可以提高RUs设置。 (临时增加RU)

  2. 您可以继续通过延续标记查找下一组结果,并继续添加它,以便获得总数。(可能在sdk中)