【MongoDB】索引

一世执手 提交于 2020-02-15 15:45:41

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({:"text",:"text",...})
说明:在集合里,为文本字段内容的文档建立文本索引。
示例:

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 }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!