zoukankan      html  css  js  c++  java
  • linux环境给mongodb创建索引

    首先我们来了解索引,如果有基础的可以直接看最后面的操作

    可参照 DoNotStop 的CSDN 博客 ,全文地址请点击:

    https://blog.csdn.net/u013725455/article/details/52037897

    创建索引:

    mongodb使用createIndex()和ensureIndex()方法来创建索引,前者用于3.0及以上版本,后者用于3.0以下版本。
    语法:
    db.COLLECTION_NAME.ensureIndex(keys[,options])
    keys:要建立索引的参数列表。如:{KEY:1},其中key表示字段名,1表示升序排序,也可使用使用数字-1降序。
    options:可选参数,表示建立索引的设置。可选值如下:
    background,Boolean,在后台建立索引,以便建立索引时不阻止其他数据库活动。默认值为false。
    unique,Boolean,创建唯一索引。默认值 false。
    name,String,指定索引的名称。如果未指定,MongoDB会生成一个索引字段的名称和排序顺序串联。
    partialFilterExpression, document.如果指定,MongoDB只会给满足过滤表达式的记录建立索引.
    sparse,Boolean,对文档中不存在的字段数据不启用索引。默认值是 false。
    expireAfterSeconds,integer,指定索引的过期时间
    storageEngine,document,允许用户配置索引的存储引擎

    > db.users.createIndex({"name":1})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
    }

    例2:给name字段创建倒序索引

    > db.users.createIndex({"name":-1})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 2,
        "numIndexesAfter" : 3,
        "ok" : 1
    }

    例3:给name,age字段创建组合索引

    > db.users.createIndex({"name":1,"age":1})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 3,
        "numIndexesAfter" : 4,
        "ok" : 1
    }

    例4:在后台给age字段创建索引

    > db.users.createIndex({age:1},{background:1})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 4,
        "numIndexesAfter" : 5,
        "ok" : 1
    }

    在后台创建索引的原因:
    在前台创建索引期间会锁定数据库,会导致其它操作无法进行数据读写,在后台创建索引是,会定期释放写锁,从而保证其它操作的运行,但是后台操作会在耗时更长,尤其是在频繁进行写入的服务器上。

    查看索引:

    MongoDB提供的查看索引信息的方法:
    getIndexes()方法可以用来查看集合的所有索引,
    getIndexKeys()方法查看索引键。
    totalIndexSize()查看集合索引的总大小,
    getIndexSpecs()方法查看集合各索引的详细信息
    例1: getIndexes()的用法

    > db.users.getIndexes()
    [
        {
            "v" : 1,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : 1
            },
            "name" : "name_1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : -1
            },
            "name" : "name_-1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : 1,
                "age" : 1
            },
            "name" : "name_1_age_1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "age" : 1
            },
            "name" : "age_1",
            "ns" : "test1.users",
            "background" : 1
        }
    ]

    例2:getIndexKeys()的用法

    > db.users.getIndexKeys()
    [
        {
            "_id" : 1
        },
        {
            "name" : 1
        },
        {
            "name" : -1
        },
        {
            "name" : 1,
            "age" : 1
        },
        {
            "age" : 1
        }
    ]

    例3:totalIndexSize()的用法

    > db.users.totalIndexSize()
    81920

    例4:getIndexSpecs()的用法

    > db.users.getIndexSpecs()
    [
        {
            "v" : 1,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : 1
            },
            "name" : "name_1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : -1
            },
            "name" : "name_-1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : 1,
                "age" : 1
            },
            "name" : "name_1_age_1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "age" : 1
            },
            "name" : "age_1",
            "ns" : "test1.users",
            "background" : 1
        }
    ]

    删除索引:

    不再需要的索引,我们可以将其删除,mongodb提供两种删除索引的方法:
    dropIndex()方法用于删除指定的索引
    dropIndexes()方法用于删除全部的索引
    例1:dropIndex()的用法

    > db.users.dropIndex("name_1")
    { "nIndexesWas" : 5, "ok" : 1 }
    > db.users.dropIndex("name_1_age_1")
    { "nIndexesWas" : 4, "ok" : 1 }
    > db.users.getIndexSpecs()
    [
        {
            "v" : 1,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : -1
            },
            "name" : "name_-1",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "age" : 1
            },
            "name" : "age_1",
            "ns" : "test1.users",
            "background" : 1
        }
    ]

    我们可以看到,name字段的索引和name与age字段的组合索引皆被删除

    例2:dropIndexes()的用法

    > db.users.dropIndexes()
    {
        "nIndexesWas" : 3,
        "msg" : "non-_id indexes dropped for collection",
        "ok" : 1
    }
    > db.users.getIndexSpecs()
    [
        {
            "v" : 1,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test1.users"
        }
    ]

    在使用了dropIndexes()方法后,我们之前建的所有索引都被删除掉了

    索引重建:

    我们之前把users的索引全部删除了,现在在name字段上建立一个正序索引,然后在name字段上重建倒序索引,可以看到重建索引是把之前name字段的索引删掉再新建一个索引的,重建之前name字段还是只有一个索引.

    > db.users.createIndex({name:1})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
    }
    > db.users.getIndexSpecs()
    [
        {
            "v" : 1,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : 1
            },
            "name" : "name_1",
            "ns" : "test1.users"
        }
    ]
    > db.users.reIndex({name:-1})
    {
        "nIndexesWas" : 2,
        "nIndexes" : 2,
        "indexes" : [
            {
                "key" : {
                    "_id" : 1
                },
                "name" : "_id_",
                "ns" : "test1.users"
            },
            {
                "key" : {
                    "name" : 1
                },
                "name" : "name_1",
                "ns" : "test1.users"
            }
        ],
        "ok" : 1
    }
    > db.users.getIndexSpecs()
    [
        {
            "v" : 1,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test1.users"
        },
        {
            "v" : 1,
            "key" : {
                "name" : 1
            },
            "name" : "name_1",
            "ns" : "test1.users"
        }
    ]

    linux环境给mongodb创建索引

    1.首先我们进入到linux mongodb安装目录的bin下面执行以下命令:

    ./mongo --host ip:端口

    2.选择用户

    use admin

    3.选择库

    use 库名

    4.执行创建索引命令,等待创建索引。

    db.表名.createIndex({"title":1})

    5.创建完成后执行exit退出

  • 相关阅读:
    EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?
    ABP Framework 5.0 RC.1 新特性和变更说明
    OI迷惑行为大赏【目前较少,持续更新中】
    【比赛日志】APIO2020(2020.08.15)
    【好题】【IPSC2003】 Got Root? 无向图删边游戏
    [HNOI2019] 校园旅行 —— 一个边界数据
    【题解】JOISC 2020 Day 3 stray
    ExtJS学习:MVC模式案例(四) 林枫705
    ExtJS学习:MVC模式案例(三) 林枫705
    ExtJS学习:MVC模式案例(二) 林枫705
  • 原文地址:https://www.cnblogs.com/drunkPullBreeze/p/10722301.html
Copyright © 2011-2022 走看看