收藏
回答

$.arrayElemAt性能问题

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 微信iOS客户端 wx332bce1c2a0bbced mr-z-release 2.8.1
await db.collection('products').where(_.expr(
              $.eq([
                $.arrayElemAt(['$parentPId', -1]),
                productId
              ])
            )).update({
              data: dataForUpdate
            })


数据库大概100万条记录,parentPId为数组型字段,已加索引。这个操作耗时15秒是否正常?

如果直接用类似这样的语句就不会慢,1秒以内:

await db.collection('products').where({
  parentPId: productId
}).update({
                  data: dataForUpdate
                })
    


这是底层有问题?能优化吗?我也可以有绕开的办法,就是把数组字段parentPId的最后一个元素冗余,单独存一个字段出来。但是这里做冗余实属有点多余,如果可以直接优化最好。

最后一次编辑于  07-05
回答关注问题邀请回答
收藏

2 个回答

  • 云开发技术运营专员-Zira
    云开发技术运营专员-Zira
    发表于小程序端
    07-04
    你好,where内不要有太多的条件嵌套,这会增加检索的复杂度
    07-04
    有用
    回复 1
    • 郑旭东
      郑旭东
      07-04
      匹配数组字段最后一个元素,我不知道还有其他什么写法
      07-04
      回复
  • 老张
    老张
    07-05

    只能建议你优化表结构了。具体怎么改,信息不足。

    07-05
    有用
    回复
登录 后发表内容
问题标签