Mongodb使用复合索引对查询结果排序

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第91篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

Mongodb的复合索引,给多字段查询带来了极大的好处,提高了多字段查询的性能。那么,对于查询后结果的排序,Mongodb复合索引是否能够有同样的优势呢?本问结合Mongodb的官方文档,来探讨复合索引的排序。

考虑下面的场景,一款移动游戏页面上展示了积分领先榜,包含了积分排序,活动每个积分的用户和用户积分更新时间。系统首先按照积分的倒序来进行排序。然后,对于相同积分的用户,名字按照字母表顺序进行排序。

为该集合添加一个复合索引,能够提高针对该查询和排序的性能。

构建leaderboard集合并插入数据

db.leaderboard.insertMany([
    {score: 50, username: 'Alex Martin', date: ISODate('2022-03-01')},
    {score: 55, username: 'Laura Garcia', date: ISODate('2022-03-02')},
    {score: 60, username: 'Alex martin', date: ISODate('2022-03-03')},
    {score: 60, username: 'Riya Patel', date: ISODate('2022-03-04')},
    {score: 50, username: 'Laura Garcia', date: ISODate('2022-03-05')}
])

构建查询语句,按照积分倒序,用户名字母表顺序正序排列

db.leaderboard.find().sort({score: -1, username: 1})

为该集合添加索引,来提高查询排序效率

db.leaderboard.createIndex({
    score: -1,
    username: 1
})  

该索引能够提高查询排序效率,索引指定的字段和排序,与查询条件相同。

同样,当为索引字段指定一个和查询条件相反的顺序时,也可以支持到该查询.

db.leaderboard.find().sort({ score: 1, username: 1})  

但是,建立的复合索引,如果不符合查询条件指定的顺序或者反向排序时,该索引不能够支持到该查询和排序。比如使用下面两个查询语句,就无法使用该索引。

db.leaderboard.find().sort({score:1, username: -1})

除此之外,排序时指定的字段顺序与索引顺序不一致时,也不能使用索引进行排序。如下面的语句无法使用该索引。

db.leaderboard.find().sort({username: 1, score: -1})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

威赞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值