Mangodb学习–索引
文章目录
- Mangodb学习--索引
- 一、创建索引
- 二、索引类型详解
- 1.单键索引
- 2.复合索引
- 3.多键索引
- 4.地理空间索引
- 5.全文索引
- 6.通配符索引
- 三、感谢
一、创建索引
db.collection.createIndex(keys,options)
示例:
// 创建索引
db.books.createIndex({title:1})
// 查询索引
db.books.getIndexs()
// 查看索引占用的空间
db.books.totalIndexSize(is_detail)
// 删除索引
db.books.dropIndex("索引名称")
db.books.dropIndexes()
二、索引类型详解
1.单键索引
什么是单键索引?—在某一个特定字段上建立索引。
如图:在score上面建立索引为升序,当我们查找socre:30的数据,会直接命中索引,由于mangodb的数据结构是B-tree中的B+tree,会根据索引出来的数据回表查询这条数据的详细数据(未出现覆盖索引的情况下)。示例:
2.复合索引
如图所创建的索引,其先根据userid升序,当userid数据相同时,再根据score降序创建索引。需要注意的是mangodb的复合索引和mysql复合索引一样,满足最左匹配原则。示例:
3.多键索引
什么是多建索引?—是针对数组的索引,在某个数组属性上建立索引。
如图所示:在addr数组的zip属性上建立升序索引。示例:
多建索引也可以出现在复合索引中,图中的item是单个属性,ratings数组。
**注意:Mangodb中不支持一个复合索引中出现多个多键索引。
示例:也可以在包含嵌套对象的数组字段上创建多键索引
db.inventory.createIndex({"stock.size":1,"stock.quantity":1})
4.地理空间索引
location:"2dsphere"是固定的用法,表示对location属性做地理空间索引
这个地理空间索引用redis也可以实现,貌似redis用的更多一些。
5.全文索引
示例:
一般来说,做全文检索还得用Es,一般不用mango做的(主要在CN,mango的全文检索居然不支持中文,所以基本上用的都是Es)。
6.通配符索引
示例:
**注意:通配符索引不支持复合索引。
注意:通配符索引是稀疏索引,其不会查询空字段。因此通配符索引不支持查询字段不存在的文档。比如上面的数据,如果第二条数据的product_arrributes这个属性不存在的话,那么其对product_arrributes的通配符索引查询将直接跳过第二条数据。
也就是说,其查询空文档或者数组的时候是不会走你定义的通配符索引的哦
三、感谢
本人学习博客参考B站博主:只想摸鱼的程序员,感谢您的教学。