首页 > 数据库技术 > 详细

【MongoDB】索引

时间:2020-02-15 16:47:19      阅读:70      评论:0      收藏:0      [点我收藏+]

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 }

【MongoDB】索引

原文:https://www.cnblogs.com/OliverQin/p/12312264.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!