MongoDB索引

生活中的索引

公交车站牌、新华字典、公司指引牌

数据库中的索引

  • 说明:索引是一种排序好的便于快速查询的数据结构
  • 作用:帮助数据库高效的查询数据

索引优缺点

  • 优点
    • 提高数据查询的效率,降低数据库的IO成本
    • 通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗
  • 缺点
    • 占用磁盘空间
    • 大量索引影响SQL语句效率,因为每次插入和修改数据都需要更新索引

语法

  • 创建索引语法:db.集合民.createIndex(待创建索引的列[,额外选项])
  • 参数:
    • 待创建索引的列:{键:1,…,键:-1}
      • 说明:1升序 -1降序 例如{age:1}表示创建age索引并按照升序的方式存储
    • 额外选项:设置索引的名称或者唯一索引等
  • 删除索引语法:
    • 全部删除:db.集合名.dropIndexes()
    • 删除指定:db.集合名.dropIndex(索引名)
  • 查看索引语法:db.集合名.getIndexes()

练习

准备:

向数据库中新增十万条数据

1
2
3
4
use test5
for(var i=0;i<100000;i++){
db.c1.insert({'name':"aaa"+i,"age":i});
}

创建普通索引

需求:给name添加普通索引

练习1:给name添加普通索引,命令:db.c1.createIndex({name:1})

image-20210617161022391

练习2:删除name索引,命令:db.c1.dropIndex(‘name_1’)

image-20210617161225889

练习3:给name创建索引并起名lisi

命令:db.c1.createIndex({name:1},{name:”lisi”})

image-20210617161457895

创建复合/组合索引

需求:给name和age添加组合索引

说明:就是一次性给两个字段建立索引

语法:db.集合名.createIndex({键1:方式,键2:方式})

image-20210617161854767

创建唯一索引

需求:给name添加普通索引

语法:db.集合名.createIndex(待添加索引的列,{unique:列名})

练习1:删除全部索引,命令:db.c1.dropIndexes();

image-20210617162204297

练习2:设置唯一索引,命令:db.c1.createIndex({name:1},{unique:”name”})

image-20210617162951683

分析索引(explain)

  • 语法:

  • 练习

    测试:age未添加索引情况

    语法:db.c1.find({age:18}).explain(‘executionStats’);

image-20210617163634027

测试:age添加索引情况

语法:db.c1.createIndex({age:1})

继续:db.c1.find({age:18}).explain(‘executionStats’)

image-20210617164018556

选择规则

  • 为常做条件、排序、分组的字段建立索引
  • 选择唯一性索引 (同值较少比如性别字段)
  • 选择较小的数据列,为较长的字符串使用前缀索引 (索引文件更小)

MongoDB索引
https://blog-theta-ten.vercel.app/2021/06/22/MongoDB索引/
作者
Chen
发布于
2021年6月22日
许可协议