MongoDB-索引
  TEZNKK3IfmPf 2023年11月14日 29 0
  • 索引就相当于字典中的目录(拼音 / 偏旁部首手)
  • 有了目录我们就能通过目录快速的找到想要的结果
  • 但是如果没有目录(拼音 / 偏旁部首手), 没有索引
  • 那么如果想要查找某条数据就必须从前往后一条一条的查找
  • 所以, 索引就是用于提升数据的查询速度的

?> 插入测试数据:

db.person.insert([
{name:'cs', age:19},
{name:'as', age:18},
{name:'bs', age:17},
]);

如何获取索引

  • 格式如下:
db.<collection>.getIndexes()
  • 示例:
db.person.getIndexes();

如何创建索引

  • 格式如下:
db.<collection>.createIndex({<field>: <1 or -1>, ...}, <options>)
  • <field>: 指定创建索引的字段(后面的数字分别代表:1 升序,-1 降序)
  • <options>: 索引的额外配置
  • 示例:
db.person.createIndex({name: 1})

如上索引创建之后的数据结构如下,给的是 1 所以是从大到小:

as: -> {name: 'as', age: 18}
bs: -> {name: 'bs', age: 17}
cs: -> {name: 'cs', age: 19}

如果是 -1 那么对应的数据结构同理可证是从小到大了。

创建单键索引

db.person.createIndex({name: 1})

查看是否使用索引

  • 和 MySQL 一样, 我们可以通过​​explain​​ 来查看索引效果
  • 格式如下:
db.<collection>.explain().<method()>
  • 示例:
db.person.explain().find({name: 'as'})

在查询的结构当中只需要关心,​​winningPlan​​​ 的这个 key 对应的 ​​stage​​ 的取值即可,stage 不同取值所对应的含义如下:

  • winningPlan -> stage -> COLLSCAN -> 遍历整个集合查询
  • winningPlan -> stage -> IXSCAN -> 通过索引查询
  • winningPlan -> stage -> FETCH -> 根据索引存储的地址取出对应文档

!> 和 MySQL 一样, MongoDB 默认也会为主键自动创建索引

db.person.getIndexes();

!> 如果查询条件中只需要查询出索引字段, 那么就不会再取出完整文档, 这样效率更高

db.person.explain().find({name: 'as'}, {_id: 0, name: 1})
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   54   0   0 mongodb
  TEZNKK3IfmPf   2023年11月15日   41   0   0 shiromongodb
  TEZNKK3IfmPf   2023年11月15日   27   0   0 mongodbjava
  TEZNKK3IfmPf   2023年11月14日   26   0   0 mysql索引
  TEZNKK3IfmPf   2023年11月14日   43   0   0 索引javascript
  TEZNKK3IfmPf   2024年05月17日   43   0   0 查询mysql索引
  TEZNKK3IfmPf   2024年03月29日   56   0   0 mongodb
  TEZNKK3IfmPf   2024年03月29日   54   0   0 mysql索引
  TEZNKK3IfmPf   2023年11月15日   26   0   0 mongodb
TEZNKK3IfmPf