• 【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({:"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 }
    
    
  • 相关阅读:
    洛谷P1085 不高兴的津津
    为什么要学习算法
    洛谷P1001 A+B Problem
    计算机问题求解周期
    洛谷P1000 超级玛丽游戏
    洛谷P1421 小玉买文具
    CF359D Pair of Numbers(ST+二分)
    2020.10.7
    2020.10.10
    2020.10.8
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12312264.html
Copyright © 2020-2023  润新知