评论

记录一次云开发数据库查询的简单优化

仅作日志记录

云开发数据库联表查询,最开始表现优异,随着数据量的增加,某条语句的查询时间居然超过了2秒。后面着手优化查询到100毫秒以内。

优化主要事项:

1、将条件(match)、排序(sort)、分页(skip、limit)移到联表之前,先查出部分结果后再联表操作。

2、取消模糊查询连接后的子表字段。

优化后的语句如下:

db.collection("form_answers")
    .aggregate()
    .match({
        _openid: "xxxx"
    })
    .sort({
        createTime: -1
    })
    .skip(0)
    .limit(20)
    .lookup({
        from: 'forms',
        let: {
            formId: '$formId'
        },
        pipeline: $.pipeline()
            .match(_.expr($.and([
                $.eq(['$_id', '$$formId']),
            ])))
            .project({
                _id: 0,
                name: 1,
                unionid: 1
            })
            .done(),
        as: 'formList',
    })
    .replaceRoot({
        newRoot: $.mergeObjects([{
            formName: $.arrayElemAt(['$formList.name', 0]),
            formUnionid: $.arrayElemAt(['$formList.unionid', 0])
        }, '$$ROOT'])
    })
    .project({
        formList: 0
    })
    .end()
最后一次编辑于  06-23  
点赞 2
收藏
评论

1 个评论

  • 心想事成
    心想事成
    发表于小程序端
    07-08

    明天试试

    07-08
    赞同
    回复
登录 后发表内容