第31章:MongoDB-索引--复合索引

①复合索引
对多个字段创建索引被称为复合索引或者组合索引

 

②创建组合索引

创建组合索引(以后台模式创建)

db.user.ensureIndex({"username": 1, "age": 1}, {"background": true})

③hint()强制使用索引查询

如果查询时发现没有使用到索引,可以使用hint函数强制使用索引查询

db.user.find().hint({"username": 1, "age": 1})

db.user.insert({"username": "zhangsan"}, {"address": {"road": "yijiang", "code": 666}})

④对内嵌文档中字段创建索引

对内嵌文档中字段创建索引

db.user.ensureIndex({"address.road": 1}, {"background": true})

db.user.find({"address.road": "yijiang"}).explain()

⑤对数组创建索引

对数组创建索引,就是对数组中的每个元素分别创建索引,而不是对整个数组建立索引,对数组的每一个元素都创建索引,那么维护索引的代价就比普通的值大

db.user.insert({"username": "zhangsan"},  {"hobby": ["eat", "drink", "mm", "money"] })

db.user.ensureIndex({"hobby": 1}, {"background": true})

db.user.find({"hobby": "mm"}).explain()

⑥注意

对于复合索引,相同的键,键在索引中的顺序不同是属于不同的索引,如:{"username": 1, "age": 1}和{"age": 1,"username": 1}是不同的索引

对于复合索引,相同的键,每个键的排序不同也属于不同的键,如 {"username": 1, "age": 1}和{"username": 1, "age": -1}是属于不同的索引

对于相同的键,键出现的顺序相同,而每个键的排序都乘以 -11,是属于相同的索引,如 {"username": 1, "age": -1}和{"username": -1, "age": -1}

对于复合索引,存在隐式索引。隐式索引的意思是当对多个字段创建复合索引时,相当于也对所有字段组成的复合索引的前缀都创建了一个索引,例如 创建了复合索引:{"field1": 1, "field2": -1, "field3": -1, "field4": -1}, 也相当于同时创建了{"field1": 1}、{"field1": 1, "field2": -1}、{"field1": 1, "field2": -1, "field3": -1} 所有前缀组成的索引

可以创建复合索引,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列

如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Lucky-stars/p/10555432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值