采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,下面这个问题是我不明白的一个问题,来源于C100DBA 的一道测试题。可能也是看视频学习的不仔细。关于索引的东西,牵扯到排序我就会感觉有点混乱。
1.下面的选项中排序会使用到索引吗 2.b选项 使用了c_1_b_1_a_1 这个索引前缀 c 是吗, 那么后面跟着的sort呢
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命令的演示内容=]
非常感谢!
题目中说“将每个文档加载到内存中....”,先find到文档集在对其进行sort,所以关键步骤在find,第二和第三个选项均走索引,不需要扫collection只有第一个需要,所以选第一个。
确实是审题不清,谢谢兄台
登录后可查看更多问答,登录/注册
30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课
2.0k 9
3.4k 4
1.6k 6
1.3k 9
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号