MongoDB索引
生活中的索引
公交车站牌、新华字典、公司指引牌
数据库中的索引
- 说明:索引是一种排序好的便于快速查询的数据结构
- 作用:帮助数据库高效的查询数据
索引优缺点
- 优点
- 提高数据查询的效率,降低数据库的IO成本
- 通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗
- 缺点
- 占用磁盘空间
- 大量索引影响SQL语句效率,因为每次插入和修改数据都需要更新索引
语法
- 创建索引语法:db.集合民.createIndex(待创建索引的列[,额外选项])
- 参数:
- 待创建索引的列:{键:1,…,键:-1}
- 说明:1升序 -1降序 例如{age:1}表示创建age索引并按照升序的方式存储
- 额外选项:设置索引的名称或者唯一索引等
- 待创建索引的列:{键:1,…,键:-1}
- 删除索引语法:
- 全部删除:db.集合名.dropIndexes()
- 删除指定:db.集合名.dropIndex(索引名)
- 查看索引语法:db.集合名.getIndexes()
练习
准备:
向数据库中新增十万条数据
1 |
|
创建普通索引
需求:给name添加普通索引
练习1:给name添加普通索引,命令:db.c1.createIndex({name:1})
练习2:删除name索引,命令:db.c1.dropIndex(‘name_1’)
练习3:给name创建索引并起名lisi
命令:db.c1.createIndex({name:1},{name:”lisi”})
创建复合/组合索引
需求:给name和age添加组合索引
说明:就是一次性给两个字段建立索引
语法:db.集合名.createIndex({键1:方式,键2:方式})
创建唯一索引
需求:给name添加普通索引
语法:db.集合名.createIndex(待添加索引的列,{unique:列名})
练习1:删除全部索引,命令:db.c1.dropIndexes();
练习2:设置唯一索引,命令:db.c1.createIndex({name:1},{unique:”name”})
分析索引(explain)
语法:
练习
测试:age未添加索引情况
语法:db.c1.find({age:18}).explain(‘executionStats’);
测试:age添加索引情况
语法:db.c1.createIndex({age:1})
继续:db.c1.find({age:18}).explain(‘executionStats’)
选择规则
- 为常做条件、排序、分组的字段建立索引
- 选择唯一性索引 (同值较少比如性别字段)
- 选择较小的数据列,为较长的字符串使用前缀索引 (索引文件更小)
MongoDB索引
https://blog-theta-ten.vercel.app/2021/06/22/MongoDB索引/