【MongoDB】索引
1.索引简介
MongoDB是基于集合建立索引(index),建立索引的目的是为了提高查询速度。MongoDB的索引基于B-tree数结构及对应算法形成的。
默认情况下,在建立集合的同时,MongoDB数据库自动为集合_id建立唯一索引
,可以避免重复插入同一_id值的文档记录。
2.索引种类
2.1 单一字段索引
语法:db.collection_name.createIndex({
说明:对一个集合文档的键建立索引,key为键名,n=1为升序,n=-1为降序
示例:
// 插入记录
db.bookInfo.insert(
{
_id:100,
title:"书单1",
amount:120,
unit:"RMB",
detail:[
{name:"西游记",price:98},
{name:"三国演义",price:120}
],
overview:{shopName:"当当网",shopNum:37}
}
)
// 为name建立索引
db.custInfo.createIndex(
{
title:1 //正序
}
)
// 嵌套文档建立索引
db.custInfo.createIndex(
{
"detail.name":1 //正序
}
)
2.2 字段值唯一索引
语法:db.collection_name.createIndex({
说明:对一个或者多个字段建立唯一索引。key为键名,n=1为升序 n=-1为降序
示例:
// 唯一索引
db.custInfo.createIndex(
{name:-1},
{unique:true}
)
注意:建立了name键的唯一索引后,往集合custInfo中插入数据时,如果name重复,则无法正常插入。
2.3 多字段索引
语法:db.collection_name.createIndex({
说明:对两个或者两个以上的字段建立索引。key为键名,n=1为升序 n=-1为降序
示例:
// 多字段索引
db.custInfo.createIndex(
{
title:-1,
unit:1
}
)
2.4 文本索引
语法:db.collection_name.createIndex({
说明:在集合里,为文本字段内容的文档建立文本索引。
示例:
db.custInfo.createIndex({name:"text"})
2.5 哈希索引
语法:db.collection_name.createIndex({key:"hashed"})
说明:key为含有哈希值的键
示例:
db.custInfo.createIndex({_id:"hashed"})
2.6 ensureIndex()索引
语法:db.collection_name.ensureIndex({{key1:n},{key2:n},{key3:n},...},option)
说明:key1,key2,key3...是集合里的键名,n=1为升序,n=-1为降序;option为可选参数
示例:
db.custInfo.ensureIndex({_id:"hashed"})
3.与索引相关的其他方法
(1) db.collection.dropIndex(index):移除集合指定的索引功能,index参数为指定需要删除的集合索引名。可以使用getIndexes()函数获取集合的所有索引名称。
(2) db.collection.dropIndex():删除集合内的所有索引功能
(3) db.collection.getIndexes():返回一个指定集合的现有索引描述信息的文档数组。
(4) db.collection.reIndex():重构索引,如果数据量较大,不建议执行该命令,会对服务器造成性能压力
(5) db.collection.totalIndexSize():提供指定集合索引大小的报告信息
示例:
> db.custInfo.getIndexes() // 查看集合下的所有索引
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.custInfo"
},
{
"v" : 2,
"key" : {
"_id" : "hashed"
},
"name" : "_id_hashed",
"ns" : "test.custInfo"
}
]
> db.custInfo.dropIndex("_id_hashed") // 删除索引
{ "nIndexesWas" : 7, "ok" : 1 }
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!