关于索引的问题

来源:6-13 【实战API】运行成功!

安可1938

2019-04-09

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

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

图片描述

写回答

2回答

Stannum

2019-04-13

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
1
安可1938
非常感谢!
2019-04-13
共1条回复

Alexdon

2019-04-10

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

0
1
安可1938
确实是审题不清,谢谢兄台
2019-04-10
共1条回复

玩转MongoDB4.0(最新版) 从入门到实践

30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课

1138 学习 · 197 问题

查看课程