关于索引的问题
来源:6-13 【实战API】运行成功!

安可1938
2019-04-09
老师您好,下面这个问题是我不明白的一个问题,来源于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命令的演示内容=]
112019-04-13 -
Alexdon
2019-04-10
题目中说“将每个文档加载到内存中....”,先find到文档集在对其进行sort,所以关键步骤在find,第二和第三个选项均走索引,不需要扫collection只有第一个需要,所以选第一个。
012019-04-10
相似问题