请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于索引的问题

老师您好,下面这个问题是我不明白的一个问题,来源于C100DBA 的一道测试题。可能也是看视频学习的不仔细。关于索引的东西,牵扯到排序我就会感觉有点混乱。

1.下面的选项中排序会使用到索引吗
2.b选项 使用了c_1_b_1_a_1 这个索引前缀 c 是吗, 那么后面跟着的sort呢

图片描述

正在回答

2回答

Alexdon回复的真好 对于find对于索引的使用描述得完全正确~

我再补充几句 sort对于索引的使用吧

我们看到"a_1"这个索引,在索引数据结构中,索引键是根据a这个字段做正向排序的,所以如果查询中的排序要求是sort( { a:1 } ),那么这个排序不需要将文档加载到RAM里操作,只要根据索引键的顺序返回就可以了

而这个"c_1_b_1_a_1"的索引,索引键是先按照c字段正向排序,再按照b字段正向排序,最后按照c字段正向排序 这样的数据结构只能支持前缀排序,也就是能支持:{ c: 1 }, { c: 1, b: 1 }, { c: 1, b: 1, a: 1 },*不能*支持:{ b: 1, a: 1}, { b: 1 }, { a: 1 }, { c: 1, a: 1 },如果查询中的排序要求是索引不能支持的,那么即使find部分不需要将文档加载进RAM里,相关文档还是需要被加载到RAM里来执行排序

上面这些操作都可以通过Mongo shell中的explain()命令来显示,建议你再回看一下课程中关于explain命令的演示内容=]

1 回复 有任何疑惑可以回复我~
  • 提问者 安可1938 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-04-13 11:55:43
Alexdon 2019-04-10 17:23:04

题目中说“将每个文档加载到内存中....”,先find到文档集在对其进行sort,所以关键步骤在find,第二和第三个选项均走索引,不需要扫collection只有第一个需要,所以选第一个。

0 回复 有任何疑惑可以回复我~
  • 提问者 安可1938 #1
    确实是审题不清,谢谢兄台
    回复 有任何疑惑可以回复我~ 2019-04-10 17:26:02
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号