代码之家  ›  专栏  ›  技术社区  ›  Naveen Prasath

Cosmos数据库中的索引

  •  1
  • Naveen Prasath  · 技术社区  · 6 年前

    我有一个巨大的宇宙数据库收集。它有大约500K条记录,我的RU范围是1000RU/s。我已经为我的自定义列创建了一个列索引。下面是索引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 ,它返回正确的值。但它是成批执行的,而不是从索引中获取值。例如,查询应该只返回一条记录。但它返回带有continuation标记的blank。我希望索引应该返回现有索引中的记录。我遗漏了什么吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Samer Boshra    6 年前

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

    • 开始使用(str_expr,str_expr)
    • 子字符串(str_expr,num_expr,num_expr)=str_expr,但仅当第一个num_expr为0时
        2
  •  -2
  •   Pankaj Rawat    6 年前

    了解RU限制,你有1000 RU的意思,你不能在一秒钟内阅读超过1000个文档(1kb文档大小)

    您可能有两种解决方案:

    1. 您可以通过continuation token继续寻找下一组结果,并继续添加它,这样您就可以得到总数了(可能在sdk中)