收藏
回答

有关云函数数据库查询的一个问题?估计大部用户弄不明白,手册也没写清楚,向大佬请教一下

官方手册云开发 SDK 中描述 _.and() 函数时,有如下介绍:

假设我们对这个 todo 表设计了两个索引 “progress-tags-index” 与 “tags-progress-index”,这两个索引的差别是:前者先以 progress 字段做索引,然后用 tag 字段索引,而后者的组合索引的顺序正好反过来,先查 tag 再查 progress。

现在我用如下语句:

db.collection('todo').where({
  progress: _.gt(50),
  tags: 'cloud'
}).get()


系统如何知道我要动用两个组合索引中的哪一个?我强调一下,JS 语言中的字典类型并不具备顺序性,上面写法并不表明 progress 字段在先。比方改成如下表达方式:

where_expr = {}
where_expr['tags'] = 'cloud'
where_expr['progress'] = _.gt(50)

db.collection('todo').where(where_expr).get()


很明显,无法从 where_expr 获知哪个字段先索引,哪个字段后索引。所以,请教各位,准确、严谨的查询语句应该怎么写?

回答关注问题邀请回答
收藏

2 个回答

  • 程强
    程强
    发表于移动端
    2020-08-04
    建议官方研发团队来回答,你们从不讲从 mogodb 移植的,也不交代哪些改了,哪些没改,别人没个猜,不厚道哇。
    2020-08-04
    有用
    回复
  • 老张
    老张
    2020-08-03

    是什么情况下,需要了解索引的先后顺序?

    2020-08-03
    有用
    回复 5
    • Mr.Zhao
      Mr.Zhao
      2020-08-03
      2020-08-03
      回复
    • 程强
      程强
      发表于移动端
      2020-08-04
      组合索引与字段顺序相关。高效的组合索引,在第1级就应将范围缩到很小。
      2020-08-04
      回复
    • 老张
      老张
      2020-08-04回复程强
      但是显然不适合你这种情况,在and模式下,先索引A和先索引B有什么区别?都得分别遍历一次索引,从理论上看,怎么看都没有效率区别。
      2020-08-04
      回复
    • 程强
      程强
      2020-08-07回复老张
      组合索引中区别大了,比方全国人口数据库中,"性别-年龄-姓名"与 "姓名-年龄"两个索引用哪个查找一个人更快?
      2020-08-07
      回复
    • 大奥歌
      大奥歌
      2021-04-15
      组合索引是否只适合条件为and的情况?or的情况也适用组合索引吗?亲测or的情况,击中为0
      2021-04-15
      回复
登录 后发表内容
问题标签